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

ace*_*ace 8 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,
                                    };
Run Code Online (Sandbox Code Playgroud)

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

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

rya*_*anm 15

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

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

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

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


jwi*_*ir3 5

表面的法线只是方向向量。由于共面的两个曲面的法线相同,因此只需要6个曲面法线。然而,通常情况下,它是法线预计要定义的情况下,每个顶点,在这种情况下就需要36(一个立方体的每个面每个三角形的每个顶点)。

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

  • 但是三角形仍然可以重用顶点 (2认同)