GLSL Varying
Verfasst: 14.11.2011, 01:08
Ahoi,
habe immernoch Probleme mit meinem Terrain Shader. Ich poste ihn erstmal.
Vertex Shader:
Frament Shader:
Kurz Erklärung: Also die Per-Pixel-Beleuchtung sollte klar sein. Was ich dnan noch versuche ist eben diese zwei Texturen zu belenden. Je nachdem wie gras und sand im vertex shader gestzt wurden.
Ihr seht richtig. Gras und Sand sind im Vertex Shader konstant. Dh. eigentlich sollte ich immer nur die Grastextur sehen. Was aber passiert ist, dass das Objekt flickert, als würden sich gras und sand dauernd ändern. Ich weiss einfach nicht ob das ein Treiberproblem ist oder ob ich rigend was total falsch mache..
Vor Allem, das ist nicht nur bei diesem Shader so. Sobald ich in einem Shader 'varying' verwende spielt die Ausgabe verrückt, als wär irgendwas bei der Interpolation kaputt oder so. Habe das ganze auch sowohl mit den Open-Source Mesa-Treiber unter Linux als auch mit den proprietären Treibern FGLRX probiert. Die Shaderversion 1.20 ist auch extra definiert, falls ihr euch wundert wieso ich kein 'in' und 'out' verwende.. Die opensource Treiber können nämlich noch kein GLSL 1.30 oder höher.
Bitte helft mir.
Halan
habe immernoch Probleme mit meinem Terrain Shader. Ich poste ihn erstmal.
Vertex Shader:
Code: Alles auswählen
#version 120
uniform mat4 worldViewProj;
uniform mat3 normalMatrix;
uniform vec3 lightDir;
attribute vec4 vertex;
varying float gras;
varying float sand;
varying vec3 normal,lightVec;
void main()
{
// Text Cord
gl_TexCoord[0] = gl_MultiTexCoord0;
// Set the position of the current vertex
gl_Position = worldViewProj * vertex;
// Calc normal
normal = normalMatrix * gl_Normal;
lightVec = lightDir;
gras = 1.0f;
sand = 1.0f;
}
Code: Alles auswählen
#version 120
uniform sampler2D grasMap;
uniform sampler2D sandMap;
varying float gras;
varying float sand;
varying vec3 normal,lightVec;
void main()
{
// Blend the Textures
float sum = gras+sand;
vec4 color = (sand/sum)*texture2D(sandMap, gl_TexCoord[0].st)+(gras/sum)*texture2D(grasMap, gl_TexCoord[0].st);
// Create lighting
vec3 n = normalize(normal);
float diffuse = max(dot(n, normalize(lightVec)), 0.0);
// Set Fragment color
gl_FragColor = diffuse*color;
}
Ihr seht richtig. Gras und Sand sind im Vertex Shader konstant. Dh. eigentlich sollte ich immer nur die Grastextur sehen. Was aber passiert ist, dass das Objekt flickert, als würden sich gras und sand dauernd ändern. Ich weiss einfach nicht ob das ein Treiberproblem ist oder ob ich rigend was total falsch mache..
Vor Allem, das ist nicht nur bei diesem Shader so. Sobald ich in einem Shader 'varying' verwende spielt die Ausgabe verrückt, als wär irgendwas bei der Interpolation kaputt oder so. Habe das ganze auch sowohl mit den Open-Source Mesa-Treiber unter Linux als auch mit den proprietären Treibern FGLRX probiert. Die Shaderversion 1.20 ist auch extra definiert, falls ihr euch wundert wieso ich kein 'in' und 'out' verwende.. Die opensource Treiber können nämlich noch kein GLSL 1.30 oder höher.
Bitte helft mir.
Halan