OpenGL ES中使用的3d立方体的法线是什么?

时间:2011-02-10 16:15:20

标签: opengl-es

我有一个定义为:

的立方体
  float vertices[] = {
            //Vertices according to faces
                -1.0f, -1.0f, 1.0f, //Vertex 0
                1.0f, -1.0f, 1.0f,  //v1
                -1.0f, 1.0f, 1.0f,  //v2
                1.0f, 1.0f, 1.0f,   //v3

                1.0f, -1.0f, 1.0f,  //...
                1.0f, -1.0f, -1.0f,         
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, -1.0f,

                1.0f, -1.0f, -1.0f,
                -1.0f, -1.0f, -1.0f,            
                1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, -1.0f,

                -1.0f, -1.0f, -1.0f,
                -1.0f, -1.0f, 1.0f,         
                -1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, 1.0f,

                -1.0f, -1.0f, -1.0f,
                1.0f, -1.0f, -1.0f,         
                -1.0f, -1.0f, 1.0f,
                1.0f, -1.0f, 1.0f,

                -1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,           
                -1.0f, 1.0f, -1.0f,
                1.0f, 1.0f, -1.0f,
                                    };

这个立方体的法线是什么?我需要法线的实际值。

我们需要6或12个法线吗?由于OpenGL ES只使用三角形,这意味着我们需要12个法线,但我可能错了。

2 个答案:

答案 0 :(得分:13)

每个顶点指定法线,并且因为共享每个顶点的三个面的法线是正交的,所以通过指定一个只有8个顶点的平面并平均三个面法线来获得一些非常难看的结果顶点正常。它将被遮蔽为一个球体,但形状像一个立方体。

您需要指定24个顶点,因此绘制多维数据集的每个面而不与任何其他顶点共享顶点。

至于价值观,'易死了。如果我们假设x向右增加,y随着我们的上升而增加,z随着我们向前移动而增加,右边的法线是(1,0,0),左边是(-1,0, 0),顶边是(0,1,0)等,等等。

总结一下:不要绘制一个立方体,绘制恰好具有重合顶点的6个四边形

答案 1 :(得分:4)

表面的法线只是方向向量。由于两个共面曲面的法线相同,因此只需要6个曲面法线。但是,通常情况下,预期法线将被定义为每个顶点,在这种情况下,您将需要36个(每个三角形的每个顶点每个顶点一个)。

要计算法线,只需使用以下计算: http://www.opengl.org/wiki/Calculating_a_Surface_Normal