Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Ich glaube es liegt daran, dass du keine Projection Matrix hast.Im Shader gibst du die Vertexdaten wahrscheinlich einfach nur aus. Daher wird nirgendswo festgelegt, wie der Wert für den Depthbuffer aussieht. Den Wertebereich legt man ja üblicherweise mit der Projectionsmatrix fest. siehe Z-near & Z-far. Du könntest auch im Vertexshader gl_FragDepth setzen und den Wert festzulegen.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Der Depthtest funktioniert auch ohne Matrizen. Zeig' mal deinen Vertexshader. In dem bisher geposteten Code kann ich keinen Fehler erkennen.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Sa Aug 18, 2007 18:47 Beiträge: 694 Wohnort: Köln
Programmiersprache: Java
Zitat:
Der Depthtest funktioniert auch ohne Matrizen.
Sicher. Aber die Depthrange ist ja 0.0 - 1.0. Wenn er da jetzt -0.1 in der Z-Achse ausgibt, landet des Quad natürlich vor allem anderen. Soweit ich es verstanden habe, führt z.b. eine Perspektivische Projektion dazu, dass alles was zwischen fNear und zFar liegt auf den Bereich zwischen -1 und 1 gemappt wird. OpenGL führt danach die Perspektivische Division durch W (welches im Beispiel 1.0 ist, bei einer Projektionsmatrix aber einen negativen Wert hat) aus und das ganze landet in einem Bereich zwischen 0 und 1 für den Depthbuffer.
_________________ Es werde Licht. glEnable(GL_LIGHTING); Und es ward Licht.
Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Könnte es sein, das die dglOpenGL etwas falsch initialisiert ?
Nein, die initialisiert nichts, sondern stellt dir nur den Kontext und die OpenGL-Funktionen zur Verfügung. Wenn da sowas Grundlegendes wie die Z-Reihenfolge falsch wäre, hätte man das sicher schon vorher gemerkt.
Zumal ich ja selbst (sowie die meisten DGL'ler) auch die ja nutzen und das problemlos klappt.
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Ich glaube, damadmax hat schon recht. Wenn man sich die Matrix anschaut, die bspw. von glOrtho berechnet wird, sieht man, dass dort das Vorzeichen der Z-Achse umgekehrt wird. Erst dadurch wird das Koordinatensystem offenbar rechtshändig. Ich habe gestern mal etwas experimentiert und zu meiner eigenen Überraschung ähnliche Ergebnisse bekommen wie du, mathias.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Sobald man etwas dreidimensionales darstellen will, benutzt man doch eigentlich sowieso Matrizen. Und 2D wird i.d.R. nur für Fullscreen-Quads (Postprocessing), Textausgaben usw. gebraucht. Dabei braucht man die Z-Koordinaten sowieso nicht.
Was hast du in deinem konkreten Fall vor?
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Sobald man etwas dreidimensionales darstellen will, benutzt man doch eigentlich sowieso Matrizen.
Normalerweise verwende ich schon Matrizen, bei dem obigen Code, wollte ich möglichst schlank, das man den Fehler besser sieht.
Zitat:
Was hast du in deinem konkreten Fall vor?
Momentan baue ich eine Bibliothek auf, mit verschiedene Objekten, unter anderen auch ein OBJ-Loader. Aber ich will nicht noch mehr Fehler einbauen, durch die Z-Inventierung habe ich alle Vektoren im Uhrzeigersinn kreiert, anstelle im Gegenuhrzeigersinn, wie es üblich währe.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Momentan baue ich eine Bibliothek auf, mit verschiedene Objekten, unter anderen auch ein OBJ-Loader. Aber ich will nicht noch mehr Fehler einbauen, durch die Z-Inventierung habe ich alle Vektoren im Uhrzeigersinn kreiert, anstelle im Gegenuhrzeigersinn, wie es üblich währe.
"Üblich" gibt es in dem Sinne ja nicht. Über das Koordinatensystem bestimmst du selbst, und auch die Reihenfolge der Eckpunkte gibts du selbst an (glFrontFace). Falsch machen kann man also nix, solange man es einheitlich macht.
P.S. : Hab auch grad nen OBJ-Loader für Android gebaut
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
mathias hat geschrieben:
durch die Z-Inventierung habe ich alle Vektoren im Uhrzeigersinn kreiert
Ich glaube, du hast was missverstanden. Beim Backface-Culling spielt es keine Rolle, ob du z invertierst oder nicht. Ob die Vertices eines Dreiecks im oder gegen den Uhrzeigersinn angeordnet sind, wird beim Rendern immer aus der Sicht des Betrachters entschieden. Ein Dreieck mit den Koordinaten
Code:
vec3(-1.0,-1.0, z)
vec3(1.0,-1.0, z)
vec3(-1.0,1.0, z)
(die im VS 1:1 durchgereicht werden) ist immer counter-clockwise - egal, ob z nun 0.5 oder -0.5 ist.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.