Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mo Jul 21, 2025 06:56

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: gl_TextureMatrix setzen
BeitragVerfasst: Do Nov 29, 2007 11:19 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
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

_________________
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"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 12:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 12:25 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
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.  

_________________
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"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 13:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 14:27 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Mindeststackgröße ist sogar nur 2! Aber bei aktuellen Karten (und Treibern) sollte das kein Problem darstellen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 14:45 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
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.

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 29, 2007 15:13 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
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

_________________
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"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 04, 2007 18:19 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
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.

_________________
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"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]