5

可以说我有以下数组:

float QuadVertices[4 * 2];
float QuadNormals[4 * 2];

我这样填写:

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

现在一切都好了,我可以渲染一个四边形,纹理它,拉伸它等等。

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

for (int i = 0; i < 8;i++)
{
    QuadNormals[i] = ??
}

但是我无法弄清楚我到底应该如何计算一个简单的二维顶点数组的法线,该数组包含 GL_QUADS 的 4 个顶点或 GL_TRIANGLES 的 6 个顶点......

4

1 回答 1

11

如果你有这个 -

   v1        v2
    +---------+
    |         | 
    |         |
    +---------+
    v3        v4

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

所以,v1 的法线是

CrossProduct((v2-v1), (v3-v1))

您可以对每个顶点重复此操作,但如果四边形是“平坦的”,它们都将相同

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

于 2012-03-21T14:54:43.727 回答