0

I have a request about surface normals. At the following code snippet is from the URL : http://www.kindohm.com/technical/wpf3dtutorial.htm

private Model3DGroup CreateTriangleModel(Point3D p0, Point3D p1, Point3D p2)
{
    MeshGeometry3D mesh = new MeshGeometry3D();

    mesh.Positions.Add(p0);
    mesh.Positions.Add(p1);
    mesh.Positions.Add(p2);
    mesh.TriangleIndices.Add(0);
    mesh.TriangleIndices.Add(1);
    mesh.TriangleIndices.Add(2);
    Vector3D normal = CalculateNormal(p0, p1, p2);
    //
    mesh.Normals.Add(normal);
    mesh.Normals.Add(normal);
    mesh.Normals.Add(normal);
    //
    Material material = new DiffuseMaterial(
        new SolidColorBrush(Colors.DarkKhaki));
    GeometryModel3D model = new GeometryModel3D(
        mesh, material);
    Model3DGroup group = new Model3DGroup();
    group.Children.Add(model);
    return group;

}

private 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(p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z);

    return Vector3D.CrossProduct(v0, v1);
}

I can't understand why the code line "mesh.Normals.Add(normal);" is repeated three times.

Could you say me the reason.

Regards

J.Frank

4

1 に答える 1

2

3 つの点から三角形を作成しているように見えます。法線は、その三角形の各ポイントの法線です。この場合、たまたますべての法線が同じ方向を向いています。つまり、サーフェス法線と同じです。

ポイント法線をサーフェス法線とは異なるものにしたい場合があります。三角形が球体のようなオブジェクトの一部である場合と同様です。次に、ポイント法線がその周囲のサーフェス法線の平均になるようにします。これにより、フラット シェーディングだけでなく、スムーズなシェーディングとハイライトを行うことができます。

于 2009-11-27T16:28:19.910 に答える