0

ポイントをまとめました。これらの点を使用してストリップ三角形を作成しました。

ここに画像の説明を入力

HelixToolkit を使用してこれらの長方形を描画しています。関数には、ポイントのリスト (三角形は三角形ストリップを使用して作成されます) と法線ベクトルのセットが必要です。今、私は正常に計算する必要があります。三角形ごとに法線があるはずだと私が思ったこと。しかし、関数は、すべてのポイントに法線があることを示しています。三角形の法線を計算するために 3 点を使用しましたが、点の法線を計算するにはどうすればよいですか。

したがって、図に示す例を使用している場合、すべてのポイント (A、B、C、D、E、F) の法線は何になりますか。

これが私が呼び出しているメソッドです。

/// <summary>
/// Adds a triangle strip to the mesh.
/// </summary>
/// <param name="stripPositions">
/// The points of the triangle strip.
/// </param>
/// <param name="stripNormals">
/// The normal vectors of the triangle strip.
/// </param>
/// <param name="stripTextureCoordinates">
/// The texture coordinates of the triangle strip.
/// </param>
/// <remarks>
/// See http://en.wikipedia.org/wiki/Triangle_strip.
/// </remarks>
public void AddTriangleStrip(
    IList<Point3D> stripPositions,
    IList<Vector3D> stripNormals = null,
    IList<Point> stripTextureCoordinates = null)

これが私が持っているものです。

var points = new List<Point3D>();
// populate points.
// TODO: populate Normal for each point.
AddTriangleStrip(points, normal);

この方法を使用して、サーフェスの法線を計算しました。

private static Vector3D CalculateNormal(Point3D firstPoint, Point3D secondPoint, Point3D thirdPoint)
{
    var u = new Point3D(firstPoint.X - secondPoint.X,
        firstPoint.Y - secondPoint.Y,
        firstPoint.Z - secondPoint.Z);

    var v = new Point3D(secondPoint.X - thirdPoint.X,
        secondPoint.Y - thirdPoint.Y,
        secondPoint.Z - thirdPoint.Z);

    return new Vector3D(u.Y * v.Z - u.Z * v.Y, u.Z * v.X - u.X * v.Z, u.X * v.Y - u.Y * v.X);
}
4

1 に答える 1

1

Point の法線のような概念はありません。法線は点ではなくを指すため、ここでは、特定の点のすべての隣接面の平均法線について話している思います。

このためには、その面に接続されているすべての点から何らかの方法で知る必要があります。すべての面について、その法線を計算し、それらの平均を作成します

お役に立てれば。

于 2013-07-03T10:37:00.090 に答える