PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GLSL Problem


Matti
2004-11-28, 14:36:52
ich will eine Textur so auf eine Ebene projizieren, daß TexturKoordinaten = BildschirmKoordinaten. Aber mit diesem Shader kommt nichts vernünftiges raus:

uniform float glwidth;
uniform float glheight;
uniform sampler2D TMU0;

void main(void)
{
gl_FragColor = texture2D(TMU0, vec2(gl_FragCoord[0]/glwidth,gl_FragCoord[1]/glheight));
}

Mit gl_FragCoord[0]/glwidth einen Gradienten zeichnen funktioniert, also muß der Fehler etwas mit dem Textur-Zugriff zu tun haben.

PS: am Ende solls mal ein Wasser-Effekt werden, aber als ersten Schritt will ich nur eine flache Reflexion mit GLSL machen.

RLZ
2004-11-28, 15:26:42
http://www.gamedev.net/columns/hardcore/rnerwater1/
Sollte alle Fragen beantworten ;)

marco42
2004-11-28, 15:34:04
ich will eine Textur so auf eine Ebene projizieren, daß TexturKoordinaten = BildschirmKoordinaten. Aber mit diesem Shader kommt nichts vernünftiges raus:

uniform float glwidth;
uniform float glheight;
uniform sampler2D TMU0;

void main(void)
{
gl_FragColor = texture2D(TMU0, vec2(gl_FragCoord[0]/glwidth,gl_FragCoord[1]/glheight));
}

Mit gl_FragCoord[0]/glwidth einen Gradienten zeichnen funktioniert, also muß der Fehler etwas mit dem Textur-Zugriff zu tun haben.

PS: am Ende solls mal ein Wasser-Effekt werden, aber als ersten Schritt will ich nur eine flache Reflexion mit GLSL machen.

Das solltest du wohl eher im vetex shader im eye space machen also so aus der huefte:

uniform vec2 dimensions;
void main ()
{
gl_Position = ftransform();
gl_TexCoord[0].st = gl_Position.xy * dimensions;
}

hab das jetzt aber nicht getest.

Matti
2004-12-01, 11:18:25
@RLZ
in dem Artikel wirds mit projizierten Texturen gemacht, jedoch ist meine Lösung eleganter (wenn sie funktionieren würde ;) )

Gibt es beim Textur-Zugriff sonst noch was zu beachten? Die Textur-Kordinaten bei texture2D(...) gehen ja von 0 bis 1, oder? Muß man noch die Textur-Matrix zurücksetzen, oder irgendwelche anderen Initialisierungen machen? Ist vielleicht ein Bug im Cat4.9 bekannt?