Hallo miteinander, Ich spiele gerade ein wenig mit Parallax Occulsion Mapping rum. Wenn ich die Tangente,Normale, Binormale per Vertex übergebe, funktioniert es wunderbar. Jetzt würde ich die drei Vektoren aber gern per PixelShader beziehen. Ich brauche sie ja, um zu berechnen wie weit die Texturkoordinaten sich verschieben, wenn ich mit dem Eye-Vektor in das betrachtete Volumen eindringe. Ich muss also vom Betrachterraum in den Tangentialraum wechseln.
Und da hab ich mir gedacht: Es ist genau umgekehrt, wie im Falle des BumpmappingShaders hier in der Shadersammlung, wo man von der Normale im Tangentialraum auf die Normale im Betrachterraum hinrechnet.
Dort wird die benötigte Matrix folgendermaßen berechnet:
Code:
vec3 q0 = dFdx(Eye.xyz);
vec3 q1 = dFdy(Eye.xyz);
vec2 st0 = dFdx(TexCoord.st);
vec2 st1 = dFdy(TexCoord.st);
vec3 S = normalize( q0 * st1.t - q1 * st0.t);
vec3 T = normalize(-q0 * st1.s + q1 * st0.s);
mat3 M = mat3(-T, -S, N);
Also hab ich mir gedacht, ich könnte ja die inverse von dieser Matrix nehmen und bekomme die gewünschte Transformation. Leider klappt es nicht, wo ist der (Denk)fehler? Kann mir jemand auf die Sprünge helfen?
Grüße VinZ
_________________ "Pixel, ich bin dein Vater." -Darf Shader
Mitglieder in diesem Forum: 0 Mitglieder und 29 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.