Hi,
Habe gerade angefangen, mich in das Thema Shader einzuarbeiten und wollte ein einfaches Normalmapping implementieren. (Ich weiß nicht, ob mein Ansatz überhaupt richtig ist, aber das ist erstmal unwichtig)
Nun habe ich das Problem, dass meine Textur (nicht die Normalmap) nicht angezeigt wird. Wenn ich jedoch Texture0 statt Texture1 benutze (im Fragmentshader) wird die Normalmap (korrekterweise) statt der anderen Textur platziert.
Hier mein Programmcode:
Code: // Shader glUseProgramObjectARB(programobject); // Textures glEnable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, normalmap); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, wood); // Shader parameters glUniform1iARB(glGetUniformLocationARB(fragmentshaderobject, 'Texture0'), 0); glUniform1iARB(glGetUniformLocationARB(fragmentshaderobject, 'Texture1'), 1); // Draw glPushmatrix; glTranslatef(-2, 0, 0); DrawCube; glPopmatrix;
Mein Vertexshader:
Code: varying vec3 normal; varying vec3 v; varying vec3 lightvec; void main(void) { vec4 Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_Position = Position; normal = normalize(gl_NormalMatrix * gl_Normal); v = vec3(Position); lightvec = normalize(vec3(gl_LightSource[0].position) - v); gl_TexCoord[0] = gl_MultiTexCoord0; gl_TexCoord[1] = gl_MultiTexCoord1; }
und mein Fragmentshader (Light etc. erst einmal auskommentiert):
Code: uniform sampler2D Texture0; uniform sampler2D Texture1; varying vec3 normal; varying vec3 v; varying vec3 lightvec; void main(void) { vec3 Eye = normalize(-v); // Normalmapping (stimmt so noch nicht) // vec4 normalmap = texture2D(Texture0, vec2(gl_TexCoord[0])); // normal = normalize(vec3(normalmap)); vec3 Reflected = normalize(reflect(-lightvec, normal)); vec4 LightAmbient = gl_LightSource[0].ambient; vec4 LightDiffuse = gl_LightSource[0].diffuse * max(dot(normal, lightvec), 0.0); vec4 LightSpecular = gl_LightSource[0].specular * pow(max(dot(Reflected, Eye), 0.0), gl_FrontMaterial.shininess); // gl_FragColor = texture2D(Texture1, vec2(gl_TexCoord[1])) * (gl_FrontLightModelProduct.sceneColor + LightAmbient + LightDiffuse + LightSpecular); gl_FragColor = texture2D(Texture1, vec2(gl_TexCoord[1])); }
mfg
|