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

标签 javascript graphics geometry visualization normals

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

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

我想计算面法线列表(垂直于每个面的平面的归一化向量,指向外)。

最佳答案

您可以简单地确定交叉法线的方向,方法是用顶点法线之一或所有 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;
}

关于javascript - 将顶点法线转换为面法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13689632/

相关文章:

c# - 从 WebMethod 返回对象 (AJAX ASP.net)

r - 根据焦点画一个椭圆

math - 计算垂直于由点和真北航向描述的平面的 3d 矢量

javascript - 错误: "Access to restricted URI denied"

javascript - 使用数组创建 TBODY

javascript - javascript文件中的整数本身

c++ - OpenGL 中的缓冲区到底是什么,我如何使用多个缓冲区来发挥我的优势?

Java初学者问题简单图解

graphics - 将 SVG 转换为 XAML

python - 最小化与 n 维点集的欧氏距离