很抱歉复制,但我已经googlin'几个小时了,没有任何结果。
我有从转换器导出的简单立方体的这个(优化的)数据:
// 8 Verticies
// 4 Texture Coordinates
// 6 Normals
// 12 Triangles
static GLshort cubeFace_indicies[12][9] = {
// Box001
{2,0,3 ,0,0,0 ,0,1,2 }, {1,3,0 ,0,0,0 ,3,2,1 }, {5,4,7 ,1,1,1 ,1,3,0 },
{6,7,4 ,1,1,1 ,2,0,3 }, {1,0,5 ,2,2,2 ,1,3,0 }, {4,5,0 ,2,2,2 ,2,0,3 },
{3,1,7 ,3,3,3 ,1,3,0 }, {5,7,1 ,3,3,3 ,2,0,3 }, {2,3,6 ,4,4,4 ,1,3,0 },
{7,6,3 ,4,4,4 ,2,0,3 }, {0,2,4 ,5,5,5 ,1,3,0 }, {6,4,2 ,5,5,5 ,2,0,3 }
};
static GLfloat cubeVertices [8][3] = {
{-100.0f,-100.0f,-100.0f},{100.0f,-100.0f,-100.0f},{-100.0f,100.0f,-100.0f},
{100.0f,100.0f,-100.0f},{-100.0f,-100.0f,100.0f},{100.0f,-100.0f,100.0f},
{-100.0f,100.0f,100.0f},{100.0f,100.0f,100.0f}
};
static GLfloat cubeNormals [6][3] = {
{0.0f,0.0f,1.0f},{0.0f,0.0f,-1.0f},{0.0f,1.0f,0.0f},
{-1.0f,0.0f,0.0f},{0.0f,-1.0f,0.0f},{1.0f,0.0f,0.0f}
};
static GLfloat cubeTextures [4][2] = {
{1.0f,2.0f},{1.0f,1.0f},{0.0f,2.0f},
{0.0f,1.0f}
};
我有一个纹理设置,我想在屏幕上看到一些东西。我最近的绘图代码如下:
glTexCoordPointer(2, GL_FLOAT, 0, cubeTextures);
glVertexPointer(3, GL_FLOAT, 0, cubeVertices);
glNormalPointer(GL_FLOAT, 0, cubeNormals);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glDrawElements(GL_TRIANGLES , 12, GL_SHORT, cubeFace_indicies);
答案 0 :(得分:5)
OpenGL ES(和常规OpenGL)中的索引数据不能像您使用它一样工作。您不是为位置,法线和纹理坐标提供每个顶点的单独索引,而是提供单个索引 i ,OpenGL ES从每个启用的顶点获取元素 i 阵列。这意味着您需要为您在当前表示中创建的所有顶点 - 法线 - texcoord组合使用单独的索引,这可能需要稍微复制您的数据。
如果可以使用平面着色绘制模型(即在绘制之前调用glShadeModel(GL_FLAT)
),则可以通过指定较少的唯一点来逃脱。在这种情况下,三角形中最后一个顶点的法线将用于整个三角形。当然,这需要仔细订购您的指数。
答案 1 :(得分:0)
要使用glDrawArrays,必须使用glEnableClientState(GL_VERTEX_ARRAY)启用GL_VERTEX_ARRAY状态,然后使用glVertexPointer(3,GL_FLOAT,0,)创建每个顶点