Seltsamer Performanceeinbruch (opengl)
-
Moin,
bin dabei mir ein simples 3D-Spielchen zu bauen und bin dabei auf ein seltsames Problem gestoßen:
Der Spieler befindet sich in einem Würfel, nichts anderes wird bisher gezeichnet (außer mein 'Hud'). Alles läuft flüssig, außer wenn man EINE (immer die selbe) Wand ansieht, dann geht die Framerate in den Keller.
http://hometown.aol.de/psycho7765/bilder/bild2.jpg
Das passiert nur bei Verwendung einer beliebigen Textur. Lässt man irgendeine Seite des Würfels weg, ist das Problem verschwunden. Hatte aber vor meine ganze Map aus so einem Würfelarray zu bauen
Außschnitt aus meiner Klasse:
void Cube::Init(float aX, float aY, float aZ, float aSize_X, float aSize_Y, float aSize_Z, float aR, float aG, float aB, TextureImage Tex) { X = aX; Y = aY; Z = aZ; Size_X = aSize_X; Size_Y = aSize_Y; Size_Z = aSize_Z; R = aR; G = aG; B = aB; Texture = Tex; (...) Active = true; CubeList = glGenLists(1); glNewList(CubeList, GL_COMPILE); glColor3f(R,G,B); glBindTexture(GL_TEXTURE_2D, Texture.texID); //Das folgende Quad macht die Probleme glBegin(GL_QUADS); glTexCoord2f(TextureCount_X, TextureCount_Y); glVertex3f( X, Z + Size_Z, Y + Size_Y); glTexCoord2f(TextureCount_X, 0.0f); glVertex3f( X, Z , Y + Size_Y); glTexCoord2f(0.0, 0.0f); glVertex3f( X, Z , Y ); glTexCoord2f(0.0f, TextureCount_Y); glVertex3f( X, Z + Size_Z, Y ); glEnd(); glBegin(GL_QUADS); glTexCoord2f(0.0f, TextureCount_Y); glVertex3f( X + Size_X, Z + Size_Z, Y + Size_Y); glTexCoord2f(0.0f, 0.0f); glVertex3f( X + Size_X, Z , Y + Size_Y); glTexCoord2f(TextureCount_X, 0.0f); glVertex3f( X + Size_X, Z , Y ); glTexCoord2f(TextureCount_X, TextureCount_Y); glVertex3f( X + Size_X, Z + Size_Z, Y ); glEnd(); glBegin(GL_QUADS); glTexCoord2f(TextureCount_X, TextureCount_Y); glVertex3f( X , Z + Size_Z, Y); glTexCoord2f(TextureCount_X, 0.0f); glVertex3f( X , Z , Y); glTexCoord2f(0.0 , 0.0f); glVertex3f( X + Size_X , Z , Y); glTexCoord2f(0.0 , TextureCount_Y); glVertex3f( X + Size_X , Z + Size_Z, Y); glEnd(); glBegin(GL_QUADS); glTexCoord2f(0.0f, TextureCount_Y); glVertex3f( X , Z + Size_Z, Y + Size_Y); glTexCoord2f(0.0f, 0.0f); glVertex3f( X , Z , Y + Size_Y); glTexCoord2f(TextureCount_X, 0.0f); glVertex3f( X + Size_X , Z , Y + Size_Y); glTexCoord2f(TextureCount_X, TextureCount_Y); glVertex3f( X + Size_X , Z + Size_Z, Y + Size_Y); glEnd(); glBegin(GL_QUADS); glTexCoord2f(TextureCount_X, TextureCount_Y); glVertex3f( X + Size_X, Z , Y + Size_Y); glTexCoord2f(TextureCount_X, 0.0f); glVertex3f( X, Z , Y + Size_Y); glTexCoord2f(0.0, 0.0f); glVertex3f( X, Z , Y ); glTexCoord2f(0.0f, TextureCount_Y); glVertex3f( X + Size_X, Z , Y ); glEnd(); glBegin(GL_QUADS); glTexCoord2f(0.0f, TextureCount_Y); glVertex3f( X + Size_X, Z + Size_Z, Y + Size_Y); glTexCoord2f(0.0f, 0.0f); glVertex3f( X , Z + Size_Z, Y + Size_Y); glTexCoord2f(TextureCount_X, 0.0f); glVertex3f( X , Z + Size_Z, Y ); glTexCoord2f(TextureCount_X, TextureCount_Y); glVertex3f( X + Size_X, Z + Size_Z, Y ); glEnd(); glEndList(); } void Cube::Draw() { glPushMatrix(); glTranslatef(0.0, 0.0, 0.0); glCallList(CubeList); glPopMatrix(); }
Bezweifle zwar dass jemand ne Ahnung hat wie das zustande kommt aber einen Versuch ist es Wert.
-
veruschmal die glbegin immer an jedem quad raus zu nehmen. vielleicht hast du dann mehr fps