为啥OpenGL里构造了几个VertexArray,然后连续调用DrawArrays只显示最后一个的结果
看OpenGL的红宝书上写为了防止多次使用glVertexPointer,可以使用VertexArray,然后试验了一下
定义了好几个VertexArray的缓冲区(VAO),对每个VAO做了原来一些列的操作(填充VBO),然后在绘图是循环绑定各个VAO,调用DrawArrays,可是结果是最终只能显示最后一次调用得到的图像,下面是源码,谁来说下哪里有问题?
glGenVertexArrays(NumPart,m_VAO);//产生NumPart部分的顶点数组对象
for(unsigned int part=0;part<NumPart;part++){
...一系列处理
glBindVertexArray(m_VAO[part]);//绑定一个VAO
glGenBuffers(1, m_VertexVBO+part);
glBindBuffer(GL_ARRAY_BUFFER, *(m_VertexVBO+part));
glBufferData(GL_ARRAY_BUFFER, sizeof(Lib3dsVector) * 3 * m_Faces[part], vertices, GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, 0, NULL);
glGenBuffers(1, m_NormalVBO+part);
glBindBuffer(GL_ARRAY_BUFFER, *(m_NormalVBO+part));
glBufferData(GL_ARRAY_BUFFER, sizeof(Lib3dsVector) * 3 * m_Faces[part], normals, GL_STATIC_DRAW);
glNormalPointer(GL_FLOAT, 0, NULL);
}
绘图时:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
for(int part=0;part<2;part++){
glBindVertexArray(m_VAO[part]);
glDrawArrays(GL_TRIANGLES, 0, m_Faces[part] * 3);
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
//然后如果循环调用VertexPointer来指定顶点数组,再连续用glDrawArrays就可以显示完全
不知道是什么原因,大家能指点下么?谢谢啦~~~
如果要用VertexArrays有什么规范的代码么,红宝书上讲得似乎不是很详细
[解决办法]
木有人回答啊,顶楼主!
为啥OpenGL里构造了几个VertexArray,然后连续调用DrawArrays只显示最后一个的结果解决方法
为啥OpenGL里构造了几个VertexArray,然后连续调用DrawArrays只显示最后一个的结果看OpenGL的红宝书上写为
