[OpenGL] Problem mit Gouraud Shading
-
Achtung Edit: Habs rausgefunden, war nen fehler bei der eingabe der normalen...
Hallo zusammen,
ich arbeite zurzeit dieses Tutorial durch:
http://arcsynthesis.org/gltut/Illumination/Tutorial 09.html
Dabei wandel ich alles ein klein wenig ab, weil ich 1. C# benutze und ich 2. das auf einem laptop mit recht alter grafikhardware bertreibe und deswgen nicht alle neuen opengl features benutzen kann.Ich habe eine Schachfigur eingeladen, das darstellen klappt (ohne licht) super und die kamera auch.
Jetzt habe ich mit licht angefangen und versucht einen Gouraud Shader zu benutzen (habe mich da stark am tutorial orientiert).
Nur leider sind die Ergebnisse sehr sehr schlecht, ich bin mir ziemlich sicher, dass irgendwo ein Fehler ist.
Hier ist ein Bild vom Ergebnis:
http://imageshack.us/photo/my-images/197/schachd.png/Hier ist der Shader:
private const string vertexSrc = @" #version 120 attribute vec3 position; attribute vec3 normal; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform vec3 lightDirectionCamSpace; uniform vec4 lightIntensity = vec4(1,1,1,1); uniform vec4 diffuseColor = vec4(1,1,1,1); varying vec4 interpColor; void main() { gl_Position = projectionMatrix * (modelViewMatrix * vec4(position,1.0)); vec3 normCamSpace = normalize((modelViewMatrix * vec4(normal, 0)).xyz); float cosAngIncidence = dot(normCamSpace, lightDirectionCamSpace); cosAngIncidence = clamp(cosAngIncidence, 0, 1); interpColor = lightIntensity * diffuseColor * cosAngIncidence; } "; private const string fragmentSrc = @" #version 120 varying vec4 interpColor; void main() { gl_FragColor = interpColor; } ";
Dabei werden normierte normalen als eingabe benommen.
lightIntensity und diffuseColor bleiben im Moment auf dem Default-Wert von (1,1,1,1).LightDirectionCamSpace wird so erzeugt:
Matrix4 viewMat = camera.ViewMatrix; Vector4 lightDirectionCamSpace; Vector4.Transform(ref lightDirection, ref viewMat, out lightDirectionCamSpace); GL.UseProgram(ShaderManager.PositionNormalShader.Program); GL.Uniform3(ShaderManager.PositionNormalShader.LightDirectionUniform, new Vector3(lightDirectionCamSpace)); GL.UseProgram(0);
Habt ihr eine Ahnung, was da falsch laufen könnte?
Viele Dank schonmal für eure Hilfe!Edit: Habs rausgefunden, war nen fehler bei der eingabe der normalen...
-
man findet den Fehler manchmal genau dann wenn man verzweifelt genug ist im Forum zu posten.