如何绘制没有索引的立方体?OpenGL ES 2.0

时间:2011-10-11 08:33:03

标签: iphone ios4 opengl-es-2.0 cube gl-triangle-strip

我想绘制没有索引的立方体并使用VBO。我在互联网上找不到任何东西(教程,例子)。 我尝试了什么:

const GLfloat Vertices[] = {
    -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,
};


glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
 glDrawArrays(GL_TRIANGLE_STRIP, 0, 24);

但事实证明有些奇怪,但不是立方体

1 个答案:

答案 0 :(得分:3)

首先检查你的glDrawPrimatives调用,你正在使用GL_QUADS作为绘制模式。其他任何东西都会产生奇怪的结果。

你的顶点很好。他们的顺序正确,位置正确。

编辑:由于你不能使用四边形,你必须单独定义每个三角形,你的第一个块将如下所示:

-1.0f, -1.0f, 1.0f, //v0
1.0f, -1.0f, 1.0f,  //v1
-1.0f, 1.0f, 1.0f,  //v2

-1.0f, 1.0f, 1.0f,  //v2
1.0f, -1.0f, 1.0f,  //v1
1.0f, 1.0f, 1.0f,   //v3

我强烈建议使用索引,如果你保持与你定义的相同的顶点缓冲区,你可以像这样设置你的索引:

byte indices[6 * 6];
int n = 0;
for(int i = 0; i < 4 * 6; i += 4)
{
   indices[n++] = i;
   indices[n++] = i + 1;
   indices[n++] = i + 2;

   indices[n++] = i + 2;
   indices[n++] = i + 1;
   indices[n++] = i + 3;
}
相关问题