3つのポイントがあり、常に表示されている面をオリゴから「面している」側にする必要がある場合、平面の法線を計算するためのショートカットはありますか?
このような
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);
代わりは ?
/ステファン