我找到了我要找的东西。答案确实是使用glDrawElements。使用glDrawElements,您可以分配 的 独特 强> 顶点到FloatBuffer或VBO,然后将面数据分配给FloatBuffer或VBO。 glDrawElements采用这两个缓冲区并为您完成工作。
float vertsCoords[] = {0.5f, 0.5f, 0.5f, //V0 -0.5f, 0.5f, 0.5f, //V1 -0.5f, -0.5f, 0.5f, //V2 0.5f, -0.5f, 0.5f, //V3 0.5f, -0.5f, -0.5f, //V4 0.5f, 0.5f, -0.5f, //V5 -0.5f, 0.5f, -0.5f, //V6 -0.5f, -0.5f, -0.5f, //V7 }; GLubyte indices[] = {0, 1, 2, 3, //Front face 5, 0, 3, 4, //Right face 5, 6, 7, 4, //Back face 5, 6, 1, 0, //Upper face 1, 6, 7, 2, //Left face 7, 4, 3, 2, //Bottom face }; glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 0, vertsCoords); glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, indices);
indices [] = fData []和vertCoords [] = vData!
Taaadaaa!
编辑:我刚刚发现了这个非常非常令人失望的消息,并且认为我会与你们分享这些消息;
引自gamedevs.net。 “_Walrus”说,
如果要从绘制数组方法中减少共享顶点(即删除多余的顶点),那么您将遇到问题,因为您无法为该顶点指定多个texCoords。我想用立方体更容易解释。使用立方体,顶点重复3次(即角落)。因此,立方体的每个面都将具有完全相同的顶点(几何上讲),但每个面可能具有不同的tex坐标。当你在移动到索引列表时减少reducency然后你遇到一个顶点的多个tex coord的问题。 Opengl不支持多个texCoord用于一个顶点(相对于索引列表),也不支持任何其他数组(即法线,颜色......)。所以我猜这个规则是:在抽取ur几何体时,只删除共享,法线,位置,texCoord..etc的冗余顶点。
=(