OpenGL - Быстрые текстурированные квадроциклы?

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

5
задан genpfault 2 October 2011 в 05:36
поделиться