Also ich habe momentan wieder ein extrem seltsames Problem das ich überhaupt nicht nachvollziehen kann. Die Vertexpositionen muss ich extrem klein angeben. Die Szene scheint Millionenfach vergrößert. Eigentlich ist es doch so, dass links unten im Viewport die Koordinaten (-1,-1) liegen und rechts oben (1,1). Irgendwie wird bei mir eine Primitive aber bereits bei 0.0000000000000000001 größer als der Viewport. Der Vertexshader:
Die Shader kompilieren eigentlich ohne Probleme. Ob mit oder ohne das Laden von Shaderbinaries ändert nichts am Ergebnis.
Ich verwende eigentlich ein VBO und ein VAO, aber ich in meiner Verzweiflung auch schon den Immediate Mode ausprobiert und das Problem besteht auch da. Deshalb vermute ich das Problem irgendwie im Shader. Das VBO und VAO initlialisiere ich so: (Ich verwende für die Objektorientierung EXT_direct_state_access. Objektorientierung hier nicht, weil ich den Code für das Forum vereinfacht habe)
Das gerendere Ergebnis unterscheidet sich bis auf die Farbe nicht von dem des VAO und VBOs. Ich habe inzwischen echt keine Idee mehr woran die seltsamen Ergebnisse bei Koordinaten liegen könnten. Ich hoffe ihr habt eine Idee.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von OpenglerF am Mi Okt 30, 2013 17:33, insgesamt 2-mal geändert.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wie sehen denn deine Matrizen aus? (Projection und Modelview)
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Mi Aug 14, 2013 21:17 Beiträge: 588
Programmiersprache: C++
Sehr merkwürdig... hast du dir mal die Vertex-Koordinaten als Farbe ausgeben lassen?
_________________ 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++
Hab' gerade mal die Spec nach "gl_FragCoord" durchsucht:
glsl-spec 3.30.6 hat geschrieben:
By default, gl_FragCoord assumes a lower-left origin for window coordinates and assumes pixel centers are located at half-pixel coordinates. For example, the (x, y) location (0.5, 0.5) is returned for the lower- left-most pixel in a window.
Somit ist es kein Wunder, dass du nur gelb siehst, da gl_FragCoord.xy in Pixeln als Einheit misst. Du teilst zwar durch 200, aber ich denke das reicht nicht, da deine Auflösung höher als 200 Pixel ist.
Was ich auch eigentlich meinte ist, dass du die Variable, die du mit
Code:
layout(location =0)invec2 Position;
im Vertexshader deklariert hast, unverändert in den Fragmentshader durchreichst und als Farbe ausgibst.
_________________ 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++
Damit weißt du wenigstens, dass die Koordinaten vollkommen korrekt im Shader ankommen (kleine Werte -> schwarz...). Da du keine Matrizen verwendest, kann es auch nicht an einem falsch eingestellten Frustum oder so liegen. *grübel*
Du renderst nicht zufällig in ein FBO, welches dann wieder als Quad gerendert wird oder so? Ich wüsste nämlich nicht, welche Parameter in der Rendering Pipeline sonst noch Position und Größe auf dem Bildschirm beeinflussen könnten.
Ansonsten: Hast du vielleicht eine ältere Version des Quelltextes, bei dem das Problem noch nicht auftrat? Wenn ja: Schritt für Schritt prüfen, mit welcher Änderung das Phänomen kam. Das weißt du wahrscheinlich alles selbst, aber mehr fällt mir dazu nicht ein.
_________________ So aktivierst du Syntaxhighlighting im Forum: [code=pascal ][/code], [code=cpp ][/code], [code=java ][/code] oder [code=glsl ][/code] (ohne die Leerzeichen)
setz mal die w-Komponente von gl_Position auf 1.0 statt 0.0. Soweit ich wird die w-Komponente zum Clipping verwendet, was Probleme gibt wenn diese 0 ist. hab es gerade in einem vom meinen Shadern probiert (1.0 durch 0.0 ersetzt) und das Bild war schwarz.
Wow, danke! Das war der Tipp in die richtige Richtung! Nach dem Vertexshader gibt es in scheinbar GLSL eine integrierte festverdrahtete perspektivische w-Division. Durch numerische Ungenauigkeiten kommt es dann offensichtlich zu diesen extrem kleinen Skalierungsfaktor.
Nachdem ich die W-Koordinate auf 1.0 gesetzt habe geht alles. Vielen dank an alle die geholfen haben!
habe noch mal nachgelesen: Es wird nach den Vertex Shader eine Division durch w durchgeführt, um die Normalized-Device-Coordinates zu erhalten, welche ja immer zwischen -1 und 1 liegen. Das ist nötig da zum Beispiel bei Anwendung einer perspektivischen Projektion die erhaltenen Koordinaten nicht zwischen -1 und 1 liegen, insbesondere ist w dann ungleich 1.
Bei einer Division durch 0 ist das Ergebnis quasi unendlich, wodurch alle Dreiecke riesig werden und Du so kleine Werte eingeben musstest.
Mitglieder in diesem Forum: 0 Mitglieder und 25 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.