Я пытаюсь отобразить как можно больше текстурированных квадов в произвольных положениях в трехмерном пространстве.По моему опыту, я не могу отобразить даже пару тысяч из них без значительного снижения частоты кадров ниже 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 в Интернете, но я не нашел учебника о том, как их использовать.Я даже не знаю, подходят ли эти объекты, чтобы понять, что я пытаюсь сделать здесь (миллиард квадратов на экране без задержки).Возможно, кто-нибудь здесь мог бы дать мне однозначное предложение о том, что я должен использовать для достижения результата?И если у вас есть еще одна минута свободного времени, не могли бы вы дать мне краткое описание того, как используются эти функции (так же, как я делал с устаревшими функциями выше)?