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

Aktuelle Zeit: Mi Jul 30, 2025 06:32

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glTexGen in Shader nachbauen ?
BeitragVerfasst: So Mai 22, 2005 15:54 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Servus,

ich würde gerne glTexGen (die Funktion zur automatischen Texturgenerierung) in einem Vertex-Programm nachbauen, da glTexGen keine Informationen an glMultiTexCoord liefert und deswegen meine Colormap immer rot (=0) zurückliefert.
Rein theoretisch sollte das eigentlich wie folgt funktionieren:
Ich nehme meinen aktuellen Vertex aus gl_Vertex, multipliziere den mit der ModelViewMatrix um meine Eye-Position zu bekommen.
Je nach Modus (GL_EYE_LINEAR, GL_OBJECT_LINEAR) rechne ich dann noch den Parameter den ich an glTexGen übergeben würde in Eye-Koordinaten um indem ich mit dem Inversen der Modelview Matrix multipliziere.
Abschliessend dann noch ein Dot-Product und fertig bin ich mit meinen Textur-Koordinaten. (Zumindest laut der glTexGen-Spezifikation)

Since so well.
Das Problem ist jetzt das weder Rotationen noch Translationen berücksichtigt werden... :-(
Hat jemand ne Idee ?

Hier mal der Shader so wie er bisher ist:

Code:
  1.  
  2. varying vec3 myTexCoord;
  3.  
  4. uniform vec4 XPlane;
  5. uniform vec4 YPlane;
  6. uniform vec4 ZPlane;
  7.  
  8. mat3 Transpose(mat3 m)
  9. {
  10.   mat3 tmp;
  11.   tmp[0][0] = m[0][0];
  12.   tmp[0][1] = m[1][0];
  13.   tmp[0][2] = m[2][0];
  14.  
  15.   tmp[1][0] = m[0][1];
  16.   tmp[1][1] = m[1][1];
  17.   tmp[1][2] = m[2][1];
  18.  
  19.   tmp[2][0] = m[0][2];
  20.   tmp[2][1] = m[1][2];
  21.   tmp[2][2] = m[2][2];
  22.  
  23.   return tmp;
  24. }
  25.  
  26. void main(void) {
  27.   vec4 EyeVertex = gl_ModelViewMatrix*gl_Vertex;
  28.   mat3 InverseModelView = Transpose(gl_NormalMatrix);
  29.   vec4 XEyePlane = vec4(vec3(XPlane)*InverseModelView,0.0);
  30.   vec4 YEyePlane = vec4(vec3(YPlane)*InverseModelView,0.0);
  31.   vec4 ZEyePlane = vec4(vec3(ZPlane)*InverseModelView,0.0);
  32.  
  33.   myTexCoord.s = dot(EyeVertex,XEyePlane);
  34.   myTexCoord.t = dot(EyeVertex,YEyePlane);
  35.   myTexCoord.p = dot(EyeVertex,ZEyePlane);
  36.   gl_Position = ftransform();
  37. }
  38.  

_________________
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 22, 2005 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Von 3DLabs gibt es ein Tool, dass GLSL Shader generiert.
http://developer.3dlabs.com/downloads/s ... /index.htm

Da wird das so gemacht:

Code:
  1. vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;
  2. gl_TexCoord[0].s = dot( ecPosition, gl_ObjectPlaneS[0] );
  3. gl_TexCoord[0].t = dot( ecPosition, gl_ObjectPlaneT[0] );
  4. gl_TexCoord[0].p = dot( ecPosition, gl_ObjectPlaneR[0] );
  5. gl_TexCoord[0].q = dot( ecPosition, gl_ObjectPlaneQ[0] );


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 22, 2005 16:36 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Werd ich mal testen. Laut Orange Book ('OpenGL Shading Language') gibt es auch entsprechende gl_EyePlaneS[0] Variablen. Allerdings meckert glslValidate bei mir.
Scheinbar sollte ich es mir doch mal angucken...

_________________
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 23, 2005 09:48 
Offline
DGL Member

Registriert: Fr Nov 12, 2004 14:58
Beiträge: 76
Wohnort: Aachen
Schlimm wie einem ein Simpler Rechtschreibfehler den Tag versauen kann...

Dumm wenn man statt gl_EyePlaneS gl_EyePlanesS schreibt. Dann kann das nicht funktionieren...

Naja, auf jeden Fall tut es das jetzt und in dem Thread zu Dependent-Textures gibt es jetzt den vollständigen Shader zu bewundern. Wenn auch nur eingeschränkt auf EYE_LINEAR und EYE_PLANE bei glTexGen.

Grüße

Wolf

_________________
Ein Schiff im Hafen ist sicher. Aber dafür werden Schiffe nicht gebaut. (Engl. Sprichwort)


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.015s | 15 Queries | GZIP : On ]