OpenGl处理大量顶点

时间:2016-03-15 16:33:26

标签: c++ opengl 3d

我有渲染模型的代码,但如果我使用太多顶点我遇到问题:程序无法分配足够的内存来处理所有顶点。

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
 glVertexPointer(3,GL_FLOAT,0,VertexArray);
 glNormalPointer(GL_FLOAT,0,NormalArray);
 glColorPointer(3,GL_FLOAT,0,ColorArray);

这是我的代码,它只是其中的一部分,但我认为足够了。 VertexArray是通过使用new运算符获得的,它是数组上的指针。但是,如果我使用长度数组,例如10000000值我收到错误。

有没有办法从RAM的不同部分分配内存?或者找到解决方案的其他方式?

1 个答案:

答案 0 :(得分:0)

如果您正在绘制在第一次调用后不经常修改的模型,您可以切换到使用VBOs并使用STATIC_DRAW标志,这很可能会告诉您的GPU将它们放入视频内存中,如果您将一些VBO用于不需要继续更改的模型,并且可以在CPU上轻松访问所有顶点数据,那么您将拥有更多的呼吸室内存。 (即使没有方法可以访问此顶点数据并进行更新,例如glBufferSubData,而是使用DYNAMIC_DRAW标志)。

VBO存储在GPU内存中,而不是系统内存中,在开始使用内存上限之前为您提供更多容量。

旧的glVertexPointer方法并没有这个好处。