Ich versuche, so viele texturierte Quads wie möglich an zufälligen Positionen im 3D-Raum anzuzeigen. Nach meiner bisherigen Erfahrung kann ich nicht einmal ein paar Tausend von ihnen anzeigen, ohne die fps deutlich unter 30 (meine Kamera Bewegung Skript wird verzögert).
Im Moment folge ich einer alten Anleitung. Nach der Initialisierung von 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);
Ich bestimme den Blickwinkel und die Perspektive:
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Dann lade ich einige Texturen:
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);
}
Und schließlich zeichne ich meine GL_QUADS mit:
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);
Ich finde diesen ganzen Code sehr selbsterklärend. Leider ist diese Art, Dinge zu tun, veraltet, soweit ich weiß. Ich habe einige vage Dinge über PBO und vertexArrays im Internet gelesen, aber ich habe keine Anleitung gefunden, wie man sie benutzt. Ich weiß nicht einmal, ob diese Objekte geeignet sind, das zu realisieren, was ich hier zu tun versuche (eine Milliarde Quads auf dem Bildschirm ohne Verzögerung). Vielleicht kann mir jemand hier einen definitiven Vorschlag machen, was ich verwenden sollte, um das Ergebnis zu erreichen? Und wenn Sie zufällig noch eine Minute Zeit haben, könnten Sie mir eine kurze Zusammenfassung geben, wie diese Funktionen verwendet werden (so wie ich es mit den veralteten oben getan habe)?