我想直截了当,这就是为什么我从这个场景开始:-
假设您要绘制两个立方体,并假设您已使用两个立方体的数据创建、绑定、填充缓冲区对象,并且您拥有两个立方体的元素数组,如下所示:
const GLshort indexData[] =
{
//Object 1
0, 2, 1, 3, 2, 0,
4, 5, 6, 6, 7, 4,
8, 9, 10, 11, 13, 12,
14, 16, 15, 17, 16, 14,
//Object 2
18, 20, 19, 21, 20, 18,
22, 23, 24, 24, 25, 22,
26, 27, 28, 29, 31, 30,
32, 34, 33, 35, 34, 32,
};
绘制两个对象的第一种方法如下:-
// first Cube
glDrawElements(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0);
// second Cube
glDrawElementsBaseVertex(GL_TRIANGLES, ARRAY_COUNT(indexData),GL_UNSIGNED_SHORT, 0, numberOfVertices / 2);
但是是否可以使用以下代码来绘制两个立方体?
// first cube
glDrawElements(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0);
//second cube
// set the indice pointer to 24 so that it starts reading data for the second cube
glDrawElements(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, pointer to 24th element);
如果是的话,那么使用有什么意义glDrawElementBaseVertex()
呢?