利用Index Buffers来避免vertex重复
可以把不同的点进行标号,我们就可以只声明不重复的的点来绘制三角形,这样可以提高绘制的效率,在复杂项目中体现更为明显
float positions[] = {//逆时针绘制
-0.5f, -0.5f, //0
0.5f, -0.5f, //1
0.5f, 0.5f, //2
//0.5f, 0.5f,
-0.5f, 0.5f, //3
//-0.5f,-0.5f
};//vertex shader 会调用三次
unsigned int indices[] = {
0,1,2,
2,3,0
};
如果想用index buffers来绘制,需要新的ibo变量
unsigned int ibo; // index buffer object
GLCall(glGenBuffers(1, &ibo));
GLCall(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo));
GLCall(glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(unsigned int), indices, GL_STATIC_DRAW)); // indices 里有六个元素,必须是 unsigned 的
//stride 实际上是一个点(比如说一个2维点是两个顶点组成,所以在这里是两个 float 类型长度)
还有需要更改的地方就是在 while (!glfwWindowShouldClose(window))循环里的DrawCall
instead of 【glDrawArray(GL_TRIANGLE, 0, 6)】
应该使用 glDrawElements(GL_TRIANGLES, 6/* 代表indices