- m3 = m1 * m2;
DGL https://delphigl.com/forum/ |
|
Variable an Shader übergeben https://delphigl.com/forum/viewtopic.php?f=20&t=11038 |
Seite 2 von 3 |
Autor: | mathias [ So Dez 08, 2013 23:08 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Meinst du mit glUniformMatrix4fv, nur dies führte nicht zum Ziel. |
Autor: | glAwesome [ So Dez 08, 2013 23:29 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Du schriebst doch schon, dass die Rotationsmatrizen eigentlich funktionieren. Wenn ich dich richtig verstanden habe, hast du also auf der CPU die Matrizen berechnet und mittels glUniformMatrix4fv zur Grafikkarte hochgeladen. Wenn du jetzt nicht um den Koordinatenursprung drehen möchtest, benötigst du zusätzlich Translationen. Also wenn du um den Punkt P rotieren möchtest, translierst du erst um -P, rotierst dann und anschließend machst du wieder eine Translation um P. Das alles kannst du in eine 4x4-Matrix stecken, indem du die Translationsmatrix mit der Rotationsmatrix multiplizierst und die resultierende Matrix mit der anderen Translationsmatrix multiplizierst. Das was du jetzt raus hast, übergibst du an den Shader. Das ist auch genau das, was die OpenGL1-Funktionen gemacht haben. Dort lag ganz oben auf dem Matrixstack die aktuelle Modelview-Matrix, die du mit glLoadIdentity() auf die Einheitsmatrix gesetzt hast. Dann hättest du glTranslate aufgerufen, was eine Translationsmatrix erstellt und die Modelview-Matrix damit multipliziert (nicht ersetzt). Analog bei glRotate: Erst wurde eine Rotationsmatrix berechnet und dann wurde die aktuelle Matrix mit dieser Rotationsmatrix multipliziert. |
Autor: | mathias [ Mo Dez 09, 2013 17:06 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Habe ich dich richtig verstanden, ich kann die Rotate× Proceduren, welche ich geschrieben habe, in den Shader verschieben ? |
Autor: | glAwesome [ Mo Dez 09, 2013 17:27 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Nein. Die Matrizen, egal ob für Rotation, Translation oder Skalierung (oder eine Kombination aus allen) berechnet die CPU. Die fertig berechnete Matrix wird dann an die GPU übergeben, und zwar mit glUniformMatrix4fv. Die Grafikkarte (genauer: der Vertexshader) multipliziert dann die Vertices mit der Matrix. |
Autor: | mathias [ Mo Dez 09, 2013 22:46 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Ist sowas möglich ? VertexShader: Code:
Code:
|
Autor: | glAwesome [ Mo Dez 09, 2013 23:03 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Ja, das geht. Ist das etwa der Versuch, eine eigene Implementierung der Matrixmultiplikation zu umgehen? (Du wirst früher oder später sowieso nicht umhin kommen.) |
Autor: | mathias [ Mo Dez 09, 2013 23:19 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Nur hat es nicht funktioniert. Ich probiere gerne Sachen aus, bevor ich was ernsthaftes mache. |
Autor: | glAwesome [ Di Dez 10, 2013 09:09 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Also die in GLSL eingebauten Matrixfunktionen funktionieren praktisch per Definition. Es ist daher eine gute Idee, zu prüfen, ob die eigene Implementation das Gleiche tut. Wenn es trotzdem nicht klappt, wie es soll, muss es an was anderem liegen. Entweder du berechnest die Matrizen m1 und m2 falsch oder das, was du mit m3 machst, ist nicht das, was du eigentlich willst. Eine häufige Fehlerquelle ist auch das Durcheinanderbringen von spalten- und zeilenweiser Speicherung (man kann beides machen, aber man muss es einheitlich tun) der Matrizen bzw. der Multiplikationsreihenfolge. Wenn du statt Code:
Code:
|
Autor: | OpenglerF [ Di Dez 10, 2013 13:58 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Nicht funktioniert heißt soviel, wie das du etwas falsch gemacht hast. Um dir zu sagen, was du falsch gemacht hast, musst du uns schon sagen, was das Fehlerbild war/ist und wie dein Shader als auch der OpenGL Code aussieht. Alles selber zu basteln hat zwar sicher einen gewissen Lerneffekt, ist aber uneffizienter und wenn es schon mit den fertigen Funktionen nicht funktioniert auch nicht zielführend. |
Autor: | damadmax [ Di Dez 10, 2013 14:54 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
mathias hat geschrieben: Ist sowas möglich ? VertexShader: Code:
Code:
Seit wann bekommt man auf diesem Weg, etwas aus dem Shader zurück? Hab ich was verpasst? |
Autor: | glAwesome [ Di Dez 10, 2013 17:41 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
@damadmax: Aus dem Kontext gerissen wirkt der Schnippsel natürlich etwas merkwürdig. Ich hatte mathias vorher gesagt, dass man alle Transformationen in eine Matrix stecken kann, indem man die Matrizen miteinander multipliziert. Den von dir zitierten Beitrag würde ich daher interpretieren wie: "Kann man das auch in GLSL machen und zwar auf diese Weise?" Da stehen ja schließlich 3 Punkte am Anfang und am Ende... |
Autor: | mathias [ Mi Dez 11, 2013 18:22 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
damadmax hat geschrieben: mathias hat geschrieben: Ist sowas möglich ? VertexShader: Code:
Code:
Seit wann bekommt man auf diesem Weg, etwas aus dem Shader zurück? Hab ich was verpasst? Habe ich das richtig verstanden, man kann nicht auf Funktionen im Shader zugreifen. Unterdessen habe ich wieder was gelernt: Code:
Diese beiden Zeilen machen nicht das Gleiche. Irgendwo habe ich gelesen das beim Matrix rechnen folgendes ist a * b <> b * a. |
Autor: | glAwesome [ Mi Dez 11, 2013 18:37 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
mathias hat geschrieben: Habe ich das richtig verstanden, man kann nicht auf Funktionen im Shader zugreifen. Du kannst OpenGL nicht sagen: "Führe mal diese GLSL-Funktion mit diesen Parametern aus und sag mir was rauskommt." Falls du das mit zugreifen meintest.Was aber geht: Du kannst im Shader beliebig viele Funktionen definieren, welche dann von der main()-Funktion oder anderen Funktionen (im selben Shader) aufgerufen werden. So könntest du z.B. deine eigene Matrixmultiplikation auf Korrektheit prüfen. Wenn du z.B. eine TranslationMatrix und eine RotationMatrix hast, kannst du
mathias hat geschrieben: Irgendwo habe ich gelesen das beim Matrix rechnen folgendes ist a * b <> b * a. Stimmt, die Matrixmultiplikation ist nicht kommutativ.
|
Autor: | mathias [ Do Jan 23, 2014 22:39 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Ich würde gerne sowas in der Art machen.: Code:
Komischerweise funktioniert dies: Code:
Edit:Fehler gefunden. Code:
|
Autor: | mathias [ Fr Mär 14, 2014 21:15 ] |
Betreff des Beitrags: | Re: Variable an Shader übergeben |
Wieso wird der ganze Rendervorgang nicht um den Faktor 3 vergrössert ? Schreibe ich aber -3 anstelle *3, dann wird die ganze Szene verschoben. Code:
|
Seite 2 von 3 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |