Bin ich zu doof für den Tiefenpuffer?
-
Hallo,
Ich habe seit gestern Nacht ein sehr komisches Problem mit dem Tiefenpuffer von Opengl. (Jedenfalls vermute ich das)
Wenn ich ein Dreieck zeichne, und dazu noch ein Gitternetz zeichne, scheint das Gitternetz durch das Dreieck hindurch.
Ich bin mir 100%ig sicher, dass das noch vorgestern nicht so war. Nur leider erinnere ich mich nicht mehr was genau ich geändert habe.
Ich werde hier mal die Aufruf-Reihenfolge hineinschreiben:
//Das Initialisieren: glfwInit(); std::srand(std::time(NULL)); if(!glfwOpenWindow(800, 600, 8, 8, 8, 8, 24, 0, GLFW_WINDOW)) //Keine Ändeurng seitdem es lief { throw std::runtime_error("Fehler beim initalisieren von OpenGL"); } glfwSetWindowTitle("OpenGL!"); glfwEnable(GLFW_STICKY_KEYS); glDepthFunc(GL_LEQUAL); glEnable(GL_DEPTH_TEST); //Die Zeichenroutine (vereinfacht) while(bla) { int width = 1; int height = 1; glfwGetWindowSize(&width, &height); if(height < 1) height = 1; glViewport(0, 0, width, height); glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); // Select projection matrix glLoadIdentity(); // Start with an identity matrix gluPerspective( // Set perspective view 65.0, // Field of view = 65 degrees (double)width/(double)height, // Window aspect (assumes square pixels) 0.0, // Near Z clipping plane 100.0 // Far Z clippling plane ); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //Kamera gluLookAt( m_pos.x, m_pos.y, m_pos.z, m_target.x, m_target.y, m_target.z, 0.0, 1.0, 0.0); //Dreieck: glPushMatrix(); glBegin(GL_TRIANGLES); glVertex3f(vec1.x, vec1.y, vec1.z); glVertex3f(vec2.x, vec2.y, vec2.z); glVertex3f(vec3.x, vec3.y, vec3.z); glEnd(); glPopMatrix(); //Gitternetz glPushMatrix(); glBegin(GL_LINES); for(int i = -static_cast<int>(count); i <= static_cast<int>(count); i++) { glColor3f(1.0, 0.0, 0.0); glVertex3f(-distance*count, 0.0f, static_cast<float>(distance*i)); // Line along X axis glVertex3f(distance*count, 0.0f, static_cast<float>(distance*i)); // -"- glColor3f(0.0, 1.0, 0.0); glVertex3f(static_cast<float>(distance*i), 0.0f, -distance*count); // Line along Z axis glVertex3f(static_cast<float>(distance*i), 0.0f, distance*count); // -"- } glEnd(); glPopMatrix(); glfwSwapBuffers(); }Die Daten der Vektoren sind irgendwelche Testwerte, aber daran sollte es nicht scheitern.
Ich habe gestern schon Stundenlang nach dem Fehler gesucht, und habe nun eigentlich die Hoffnung schon aufgegeben ihn selber zu finden.
Deswegen frage ich hier
Es handelt sich mit Sicherheit um irgendetwas sehr einfaches, was ich nur einfach die ganze Zeit übersehe.
Hier ist zum Abschluss noch ein Screenshot:
http://www.abload.de/img/errore8u.jpgVielleicht weiß ja jemand hier was ich falsch mache

-
Tauschst du noch die Buffer? glfwSwapBuffer oder so?
-
Oh, ich wusste ich habe was vergessen^^
Natürlich wechsel ich am Ende die Buffer mit "glfwSwapBuffers();"
Ich editiere das mal oben rein.
-
Hi,
setz die Near Clipping Plane auf einen Wert > 0 z.B. 0.1f oder besser noch größer wenn die Szene das erlaubt.
Ciao,
Stefan
-
Stefan Zerbst schrieb:
Hi,
setz die Near Clipping Plane auf einen Wert > 0 z.B. 0.1f oder besser noch größer wenn die Szene das erlaubt.
Ciao,
StefanWow, danke. Du bist meine Rettung.
(Ich wusste doch, dass es sowas einfaches ist *grummel*)
Vielleicht hat jetzt noch jemand Lust mir zu erklären oder eine Seite zu posten wo erklärt wird, was genau diese beiden Werte bewirken

-
Hi,
bitte, bitte

Lies mal hier: http://www.linuxmanpages.com/man3/gluPerspective.3x.php
Insbesondere der Abschnitt NOTES dürfte dein Problem erklären.
Ciao,
Stefan