如果我有三个点并且总是希望可见的面应该是从 origo“面对”的那一面,是否有计算平面法线的捷径?
像这样
mesh.Positions.Add(p0);
mesh.Positions.Add(p1);
mesh.Positions.Add(p2);
mesh.TriangleIndices.Add(0);
mesh.TriangleIndices.Add(1);
mesh.TriangleIndices.Add(2);
normal = Vector3D(1,1,1);
mesh.Normals.Add(normal);
mesh.Normals.Add(normal);
mesh.Normals.Add(normal);
model = new GeometryModel3D(mesh, material);
还是我每次都必须计算正常值?
如果我必须计算法线,那么算法是什么,我在互联网上查看并尝试了几种方法,但它们让我怀疑,就像这个一样。
normal = CalculateNormal(p0, p1, p2);
CalculateNormal 在哪里
public static Vector3D CalculateNormal(Point3D p0, Point3D p1, Point3D p2)
{
Vector3D v0 = new Vector3D(p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z);
Vector3D v1 = new Vector3D(p1.X - p2.X, p1.Y - p2.Y, p2.Z - p1.Z);
return Vector3D.CrossProduct(v0, v1);
}
不应该
Vector3D v1 = new Vector3D(p1.X - p2.X, p1.Y - p2.Y, p1.Z - p2.Z );
反而 ?
/斯蒂芬