Flackern In OGL
-
Hi!
Also ich habe folgendes Problem: Ich habe eine ganz einfach OGL Anwendung erstellt. In der DrawGLScene funktion wird mit dem folgenden Code ein 3d Trapez(??????) erzeugt:
float corner=length/2*5.; // This Is For The Top float corner2=(length/2*5f)+5f;// And This For The Ground // length ist in diesem fall 4 glBegin(GL_QUADS); // Top Face glNormal3f( 0.0f, 1.0f, 0.0f); glVertex3f(corner, 0, -corner); glVertex3f(-corner, 0, -corner); glVertex3f(-corner, 0, corner); glVertex3f(corner, 0, corner); // Bottom Face glNormal3f( 0.0f,-1.0f, 0.0f); glVertex3f(corner, -10, corner); glVertex3f(-corner, -10, corner); glVertex3f(-corner, -10, -corner); glVertex3f(corner, -10, -corner); // Front Face glNormal3f( 0.0f, 0.0f, 1.0f); glVertex3f(corner, 0, corner); glVertex3f(-corner, 0, corner); glVertex3f(-corner2, -10, corner2); glVertex3f(corner2, -10, corner2); // Back Face glNormal3f( 0.0f, 0.0f,-1.0f); glVertex3f(corner2, -10, -corner2); glVertex3f(-corner2, -10, -corner2); glVertex3f(-corner, 0, -corner); glVertex3f(corner, 0, -corner); // Left Face glNormal3f(-1.0f, 0.0f, 0.0f); glVertex3f(-corner, 0, corner); glVertex3f(-corner, 0, -corner); glVertex3f(-corner2, -10, -corner2); glVertex3f(-corner2, -10, corner2); // Right face glNormal3f( 1.0f, 0.0f, 0.0f); glVertex3f(corner, 0, -corner); glVertex3f(corner, 0, corner); glVertex3f(corner2, -10, corner2); glVertex3f(corner2, -10, -corner2); glEnd();
Zudem kann man mit der tastatur das teil drehen, sowie rein/raus zoomen. Dazu gibt es halt die (float) Variablen rotX, rotY und zoom. Vor dem Zeichnen wird dann
glTranslatef(0.0f, 0.0f, zoom); // First Zoom In/Out glRotatef(rotX, 1.0f, 0.0f, 0.0f); // Then Move On The X Axis glRotatef(rotY, 0.0f, 1.0f, 0.0f); // And Then On The Y Axis
aufgerufen. Das funzt zwar auch alles soweit so gut, doch leider flackert das "podest" stark... es gibt halt immer einige Dreiecke die nicht angezeigt werden. Diese wechseln wenn man das Teil dreht oder rein/raus zoomt.
Leider habe ich überhaupt keine AHnung woran es liegen könnte.. ich dachte zuerst an den depthbuffer oder wie der heißt, habe dann aber schon (ohne erfolg) einige sachen ausprobiert.MfG DasPinsch
-
Meinst du Pixelfragmenete oder wirkliche Polygone?
Falls Pixel:
Das ist der Depthbuffer. Gerade auf älteren Geforce Karten (wie meiner Gef. 2 Ti) macht der Probs. Im wesentlichen kommt es darauf an wie weit die Nearclipping-Plane entfernt ist. Wenn da etwas wie 0.001 steht sind Fehler vorprogrammiert. Das Minimum sollte da 4.0f sein. Das Flackern ist typisch für unpräzise Depthbuffer.Falls nicht:
Disable mal das Culling glDisable(GL_CULL_FACE);
Wenns dann weg ist, hälst du die Renderrichting (Clockwise, Counterclockwise) nicht ein.
-
Könnte aber auch eine Kombination von Depthbuffer & Blending sein. Das ruft auch solche Probs hervor
-
Benutzt Du Double-Buffering? Wenn nicht: machen!
-
Argh, habs schon gefunden, die Bodenfläche war zu klein^^
MfG DasPinsch