我希望能在三维空间中随机位置显示尽可能多的纹理四边形。但是根据我的经验,即使只显示几千个四边形,fps也会明显下降到30以下(我的相机移动脚本变得很卡)。
目前我正在遵循一份古老的教程。在初始化OpenGL之后:
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0, 0, 0, 0);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
我设置了视点和透视:
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
接下来我加载一些纹理:
glGenTextures(TEXTURE_COUNT, &texture[0]);
for (int i...){
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D,3,TextureImage[0]->w,TextureImage[0]->h,GL_RGB,GL_UNSIGNED_BYTE,TextureImage[0]->pixels);
}
最后,我使用以下代码绘制GL_QUADS:
glBindTexture(GL_TEXTURE_2D, q);
glTranslatef(fDistanceX,fDistanceZ,-fDistanceY);
glBegin(GL_QUADS);
glNormal3f(a,b,c);
glTexCoord2f(d, e); glVertex3f(x1, y1, z1);
glTexCoord2f(f, g); glVertex3f(x2, y2, z2);
glTexCoord2f(h, k); glVertex3f(x3, y3, z3);
glTexCoord2f(m, n); glVertex3f(x4, y4, z4);
glEnd();
glTranslatef(-fDistanceX,-fDistanceZ,fDistanceY);
我认为所有的代码都非常自解释。不幸的是,这种做法已经被弃用了,据我所知。我在互联网上读到一些关于PBO和vertexArrays的模糊信息,但我没有找到任何有关如何使用它们的教程。我甚至不知道这些对象是否适合实现我在这里尝试做的事情(在屏幕上显示十亿个四边形而没有延迟)。也许这里的任何人都可以给我一个明确的建议,告诉我应该使用什么来实现结果?如果你恰好还有一分钟的空闲时间,能否给我一个简短的摘要,介绍一下这些函数是如何使用的(就像我上面介绍过的被弃用的函数)?