javascript – 将顶点法线转换为面法线

我有一个三角形多面体(不一定是凸面)和以下信息:

每个顶点的位置列表.
定义每个面的顶点三元组列表.
顶点法线列表(这里顶点法线是来自每个顶点的向量,通过对每个顶点周围的面法线(见下文)求平算).

我想计算面法线列表(垂直于每个面的平面,向外指向的标准化矢量).

解决方法:

您可以通过点顶点法线或所有3个顶点的平均值来简单地确定交叉法线的方向.

这是伪代码:

Vec3 CalcNormalOfFace( Vec3 pPositions[3], Vec3 pNormals[3] )
{
    Vec3 p0 = pPositions[1] - pPositions[0];
    Vec3 p1 = pPositions[2] - pPositions[0];
    Vec3 faceNormal = crossProduct( p0, p1 );

    Vec3 vertexNormal = pNormals[0]; // or you can average 3 normals.
    float dot = dotProduct( faceNormal, vertexNormal );

    return ( dot < 0.0f ) ? -faceNormal : faceNormal;
}
上一篇:初学者java,显示与整数相关的特殊字符


下一篇:从java.awt.geom.GeneralPath中删除一个点/操作