Если у меня есть три точки и я всегда хочу, чтобы видимая грань была стороной, которая «обращена» от оригинала, есть ли ярлык для вычисления нормали плоскости?
Как это
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 = новый Vector3D (p1.X - p2.X, p1.Y - p2.Y, p1.Z - p2.Z );
вместо?
/ Стефан