编辑:我刚刚意识到,如果你不使用着色器,这可能并不适用,但因为我不熟悉的传统的OpenGL我不知道有什么好处呢我的帖子中给你。您使用/定位的是哪个版本?
我最近询问关于glDrawElements here的问题。希望我发布的内容给出一些解释/例子。
就我的理解:你的指数是由你确定,所以如果你想在第二个顶点开始,你可以尝试(基本骨架,没有glVertexAttribPointer调用等,但我可以添加这些如果你想):
const float VBOdata = {
//Some X and Y coordinates for triangle1 (in the first quadrant)
//(z = 0, w = 1 and are not strictly necessary here)
0.0f, 1.0f, 0.0f, 1.0f //index 0
0.0f, 0.0f, 0.0f, 1.0f //1
1.0f, 0.0f, 0.0f, 1.0f //2
//Some X and Y coordinates for triangle2 (in the second quadrant)
0.0f, -1.0f, 0.0f, 1.0f //3
0.0f, 0.0f, 0.0f, 1.0f //4
-1.0f, 0.0f, 0.0f, 1.0f //5
//Now some color data (all white)
1.0f, 1.0f, 1.0f, 1.0f, //0
1.0f, 1.0f, 1.0f, 1.0f, //1
1.0f, 1.0f, 1.0f, 1.0f, //2
1.0f, 1.0f, 1.0f, 1.0f, //3
1.0f, 1.0f, 1.0f, 1.0f, //4
1.0f, 1.0f, 1.0f, 1.0f, //5
};
const GLubyte indices[] = {
3, 4, 5,
};
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_BYTE, indices);
凡GL_TRIANGLES是原语的类型,3张是“指数”的内部元素的数量,GL_UNSIGNED_BYTE是如何解释他们,“指数”是数组的只是名字。
这应该只绘制第二个三角形。您也可以尝试glDrawElementsBaseVertex,但我没有亲自尝试过。我收集的是,您将生成/明确地编写从0开始的索引,但给出一个偏移量,以便它实际读取0 +偏移量,1 +偏移量等等。
这有帮助吗?
是的,我正在与glDrawElementsBaseVertex四处张望。在我看来,最简洁的方式就是不用翻录大量渲染组件 –