DGL
https://delphigl.com/forum/

gl_TextureMatrix setzen
https://delphigl.com/forum/viewtopic.php?f=20&t=7095
Seite 1 von 1

Autor:  damadmax [ Do Nov 29, 2007 11:19 ]
Betreff des Beitrags:  gl_TextureMatrix setzen

Moin Leute,

Ich möchte im Shader gl_TextureMatrix[1] auslesen. Aber was zum Geier bedeutet die 1 ? Bzw wie setze ich die Matrix im Programm? Soll das die Texture Unit sein? Also einfach mit glActiveTexture auf die Unit wechseln und die Matrix setzen?

Gruß
damadmax

Autor:  Lossy eX [ Do Nov 29, 2007 12:02 ]
Betreff des Beitrags: 

Jede TMU hat ihren eigenen TextureMatrix Stack von daher würde ich mal behaupten, dass die 1 die TMU ist, deren Matrix du ansprechen möchtest.

Ändern kannst du die Matrix in dem du mittels glMatrixMode auf die Texturmatrix wechselst. Mit glRotate, glScale und glTranslate wird dann die Matrix der aktuellen TMU (glActiveTexture) manipuliert.

Aber achte darauf, dass du anschließend wieder zur ModelView wechselst und das du die TexturMatrix entsprechend zurücksetzt. Die ModelView wird ja normal zu Begin eines jeden Frames zurückgesetzt.

Autor:  damadmax [ Do Nov 29, 2007 12:25 ]
Betreff des Beitrags: 

Danke für die schnelle Antwort.

Also ungefähr so:
Code:
  1.  
  2. glMatrixMode(GL_TEXTURE);
  3. glActiveTexture(GL_TEXTURE1);
  4.  
  5. // Matrix ändern
  6.  
  7. glMatrixMode(GL_MODELVIEW);
  8.  
  9. // Szene rendern
  10.  
  11. glMatrixMode(GL_TEXTURE);
  12. glActiveTexture(GL_TEXTURE1);
  13. glLoadIdentity;
  14. glMatrixMode(GL_MODELVIEW);
  15.  

Autor:  Lossy eX [ Do Nov 29, 2007 13:03 ]
Betreff des Beitrags: 

Ja ziemlich genau. Wann du die aber zurücksetzt hängt natürlich immer von deinem Programm ab. Wenn du diese TMU nur ein einziges Mal benutzt genügt es auch sie beim ersten Setzen zurückzusetzen.

PS: So etwas wie Pop und PushMatrix funktioniert bei dem Textur Matrix Stack natürlich auch. Wobei der Stack aber normal auch nicht so groß ist wie der der ModelView. Aber das sollte eher kein Ding sein.

Autor:  Flash [ Do Nov 29, 2007 14:27 ]
Betreff des Beitrags: 

Die Mindeststackgröße ist sogar nur 2! Aber bei aktuellen Karten (und Treibern) sollte das kein Problem darstellen.

Autor:  oc2k1 [ Do Nov 29, 2007 14:45 ]
Betreff des Beitrags: 

Ganz im gegenteil, da die matrizenstacks reine software implementatioenen sind, werden dort oft nur die minimalen voraussetzungen implementiert. Dazu kommt das die anzahl der TMUs inzwischen auch nur eine software schnittstelle sind, Die GF6/7 serie kann z.B. 16 verschiedene texturen im fragmentshader nutzen, aber es gibt nur die 8 texture matrizen. Noch verwirrender wird es wenn die Anzahl der "Textur Mapping Units" mit 4 angegeben wird, was sich hier jedoch nur auch multitexturing bezieht.

gl_TextureMatrix[1] ist übrigends nicht die erste sondern die zweite texturematrix, von denen es mindestends 8 gibt ("mindestends" könnte man hier eher weglassen). Welche bearbeitet wird hängt von glActiveTexture(...) ab.

Autor:  damadmax [ Do Nov 29, 2007 15:13 ]
Betreff des Beitrags: 

Super Sache. Klappt schonmal ganz gut.
Leider übergebe ich anscheinend noch die falsche Matrize.
Die ShadowMap bewegt sich äusserst merkwürdig über die Szenerie und scheint auch irgendwie abhängig von der Kameraposition zu sein. Was eigentlich nicht sein dürfte, da ich nach dem Matrixmode-wechsel keinerlei Änderungen vornehme, die Daten von der Kamera mitbringen.
Wobei mir gerade einfällt, dass beim setzen der Lichtposition mit glLight schon mit der aktuellen Modelview Matrix multipliziert wird? Sprich ich könnte einfach die Kamerabewegung aus der Lichtposition rausrechnen und hätte dann die richtige Matrize für den Schatten!
Mann...sofern das stimmt, was ich bezweifle, finde ich es immer wieder erstaunlich, wie man sich die Fragen doch selbst beantwortet indem man versucht auf einen Beitrag zu antworten... :D

Autor:  damadmax [ Di Dez 04, 2007 18:19 ]
Betreff des Beitrags: 

YEAH!

es klappt!
meine obige annahme war total falsch! die matrix war "fast" richtig. weiteres problem lag im shader. habe die schattenkoordinaten im vertexshader errechnet, und die hat er dann natürlich herrlichst über die geometrie interpoliert. im fragmentshader klappt das schon etwas besser.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/