假设我有以下数组:
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] = ??
}
但我无法弄清楚我应该如何计算一个简单的2d顶点数组的法线,该数组包含GL_QUADS的4个转换或GL_TRIANGLES的4个转换....
答案 0 :(得分:6)
如果你有这个 -
v1 v2
+---------+
| |
| |
+---------+
v3 v4
如果v1..v4是四边形的顶点,那么要计算v1处的法线,你应该沿着它所在的两条边计算向量,然后计算这些顶点的叉积。
因此,v1的法线是
CrossProduct((v2-v1), (v3-v1))
您可以为每个顶点重复此操作,但如果四边形是“平坦的”它们将全部相同
如果你有其他四边形连接到这个四边形,你可能想要计算每个四边形的法线,然后将所有连接四边形的平均值指定为该顶点的法线