Hi @ll
Der Titel mag vielleicht in anbetracht des Sinns etwas verwirrend sein, aber was besseres ist mir gerade nicht eingefallen.
Ich möchte gerne die Wassertiefe in einer Szene in eine Textur rendern. Eigentlich schien das ganz einfach, ich müsste ja nur die Y-Koordinate nehmen und vielleicht noch mit einem Faktor verrechnen und dann als Farbe darstellen - Das klappte allerdings nicht.
Das Problem ist, dass ich immer auf falsche ergebnisse kam. Bis jetzt bin ich einfach noch nicht darauf gekommen, wie ich es richtig machen kann. Hier mal mein Shadercode:
Code: varying vec4 vpos; varying vec4 cpos; varying vec4 cutpos; uniform float planey; uniform int mode; uniform mat4 cm; void main(void) { vpos = gl_Vertex; cpos = gl_ModelViewMatrix * gl_Vertex; cutpos = gl_ModelViewMatrix * vec4(1.0, 0.0, 0.0, 1.0); gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; gl_FrontColor = gl_Color; }
(^ Vertexshader)
Code: varying vec4 vpos; varying vec4 cpos; varying vec4 cutpos; uniform float planey; uniform int mode; uniform mat4 cm; void main(void) { float diff; diff = cutpos.y - cpos.y; gl_FragColor = vec4(diff, diff, diff, 1.0); }
(^ Fragmentshader)
Das Problem ist bei diesem Shader, dass der Farbverlauf immer relativ zur Kamera ist, dass heißt, wenn ich die Kamera bewege (bzw. im moment nur drehe) dann bewegt sich der Verlauf nicht mit, also ich habe immernoch nach oben hin meinen Verlauf von schwarz nach weiss, obwohl die Wasserfläche ganz anders steht.
Weiss da wer was, wie ich das lösen kann?
//Edit: Bei unklarheiten oder verständnisfragen: scheut nicht hier nachzufragen
Gruß Lord Horazont
|