C#实现实现3D效果完整实例效果完整实例
主要介绍了C#实现3D效果的方法,结合完整实例形式分析了C#实现文字3D显示效果的具体步骤与相关操作技巧,
需要的朋友可以参考下
本文实例讲述了C#实现3D效果的方法。分享给大家供大家参考,具体如下:
一、新建一类文件
private static double[] addVector(double[] a, double[] b)
{
return new double[] { a[0] + b[0], a[1] + b[1], a[2] + b[2] };
}
private static double[] scalarProduct(double[] vector, double scalar)
{
return new double[] { vector[0] * scalar, vector[1] * scalar, vector[2] * scalar };
}
private static double dotProduct(double[] a, double[] b)
{
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
private static double norm(double[] vector)
{
return Math.Sqrt(dotProduct(vector, vector));
}
private static double[] normalize(double[] vector)
{
return scalarProduct(vector, 1.0 / norm(vector));
}
private static double[] crossProduct(double[] a, double[] b)
{
return new double[]
{
(a[1] * b[2] - a[2] * b[1]),
(a[2] * b[0] - a[0] * b[2]),
(a[0] * b[1] - a[1] * b[0])
};
}
private static double[] vectorProductIndexed(double[] v, double[] m, int i)
{
return new double[]
{
v[i + 0] * m[0] + v[i + 1] * m[4] + v[i + 2] * m[8] + v[i + 3] * m[12],
v[i + 0] * m[1] + v[i + 1] * m[5] + v[i + 2] * m[9] + v[i + 3] * m[13],
v[i + 0] * m[2] + v[i + 1] * m[6] + v[i + 2] * m[10]+ v[i + 3] * m[14],
v[i + 0] * m[3] + v[i + 1] * m[7] + v[i + 2] * m[11]+ v[i + 3] * m[15]
};
}
private static double[] vectorProduct(double[] v, double[] m)
{
return vectorProductIndexed(v, m, 0);
}
private static double[] matrixProduct(double[] a, double[] b)
{
double[] o1 = vectorProductIndexed(a, b, 0);
double[] o2 = vectorProductIndexed(a, b, 4);
double[] o3 = vectorProductIndexed(a, b, 8);
double[] o4 = vectorProductIndexed(a, b, 12);
return new double[]
{
o1[0], o1[1], o1[2], o1[3],
o2[0], o2[1], o2[2], o2[3],
o3[0], o3[1], o3[2], o3[3],
o4[0], o4[1], o4[2], o4[3]
};
}
private static double[] cameraTransform(double[] C, double[] A)
{
double[] w = normalize(addVector(C, scalarProduct(A, -1)));
double[] y = new double[] { 0, 1, 0 };
double[] u = normalize(crossProduct(y, w));
double[] v = crossProduct(w, u);
double[] t = scalarProduct(C, -1);
return new double[]
{
u[0], v[0], w[0], 0,
u[1], v[1], w[1], 0,
u[2], v[2], w[2], 0,
评论1