计算四边形的顶点法线

use*_*005 3 opengl graphics normals

让我们说我有以下数组:

float QuadVertices[4 * 2];
float QuadNormals[4 * 2];
Run Code Online (Sandbox Code Playgroud)

我用这种方式填写:

//Fill vertices for a 2d quad
Renderer->FillVertices(QuadVertices,GL_QUADS,x,y,width,height);
Run Code Online (Sandbox Code Playgroud)

现在在这一点上一切都很好我可以渲染四边形,纹理,拉伸它和所有这些.

但现在我想计算四边形的法线:

for (int i = 0; i < 8;i++)
{
    QuadNormals[i] = ??
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚我应该如何计算一个简单的2d顶点数组的法线,该数组包含GL_QUADS的4vertices或GL_TRIANGLES的4vertices ....

jco*_*der 7

如果你有这个 -

   v1        v2
    +---------+
    |         | 
    |         |
    +---------+
    v3        v4
Run Code Online (Sandbox Code Playgroud)

其中v1..v4是四边形的顶点,然后计算v1处的法线,你应该计算它所在的两条边上的矢量,然后计算这些顶点的叉积.

所以,v1的法线是

CrossProduct((v2-v1), (v3-v1))
Run Code Online (Sandbox Code Playgroud)

您可以为每个顶点重复此操作,但如果四边形是"平坦的",它们将全部相同

如果你有其他四边形连接到这个四边形,你可能想要计算每个四边形的法线,然后将所有连接的四边形的平均值指定为该顶点的法线

  • 呸,只是`glEnable(GL_NORMALIZE)`:) (4认同)