我在OpenGL编程方面很新颖。我的目标是设置面向对象的图形编程,我可以自豪地说我已经取得了一些进展。现在我有不同的问题。C++,OpenGL - 渲染大量的茶壶
可以说我们有工作程序什么可以使一个,两个或许多旋转茶壶。我通过在我的课堂内使用列表来做到这一点。绘图功能的原始代码是在这里:
void Draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
for(list<teapot>::iterator it=teapots.begin();it!=teapots.end();it++){
glTranslatef(it->pos.x,it->pos.y,it->pos.z);
glRotatef(angle,it->ang.x,it->ang.y,it->ang.z);
glutSolidTeapot(it->size);
glRotatef(angle,-it->ang.x,-it->ang.y,-it->ang.z);
glTranslatef(-it->pos.x,-it->pos.y,-it->pos.z);
}
glPopMatrix();
glutSwapBuffers();
}
一切都很好,但是当我画大量的茶壶 - 两行说,128 - 我的FPS数下降。我不知道,如果这只是硬件限制,或者我做错了什么?也许glPushMatrix()和glPopMatrix()应该更频繁地发生?或更少?
GLUT使用即时模式渲染,这对于性能来说很糟糕。改用VBOs,或者至少首先将茶壶呈现在显示列表中。 – 2014-09-27 13:59:43