Fixed specular mapping

Also made code clearer


Former-commit-id: f27a9214f356218fdf7e75003317a1678079fe2a
This commit is contained in:
Lynix 2013-01-11 14:37:50 +01:00
parent f8aedb2df1
commit c108deb999
1 changed files with 17 additions and 10 deletions

View File

@ -148,10 +148,10 @@ namespace
// Directional Light // Directional Light
sourceCode += "{\n" sourceCode += "{\n"
"vec3 lightDir = normalize(-Lights[i].parameters1.xyz);\n" "vec3 lightDir = normalize(-Lights[i].parameters1.xyz);\n"
"light += Lights[i].ambient.xyz * (MaterialAmbient.xyz + SceneAmbient.xyz);\n" "light += Lights[i].ambient.rgb * (MaterialAmbient.rgb + SceneAmbient.rgb);\n"
"\n" "\n"
"float lambert = max(dot(normal, lightDir), 0.0);\n" "float lambert = max(dot(normal, lightDir), 0.0);\n"
"light += lambert * Lights[i].diffuse.xyz * MaterialDiffuse.xyz;\n" "light += lambert * Lights[i].diffuse.rgb * MaterialDiffuse.rgb;\n"
"\n" "\n"
"if (MaterialShininess > 0.0)\n" "if (MaterialShininess > 0.0)\n"
"{\n" "{\n"
@ -165,7 +165,7 @@ namespace
else else
sourceCode += "light"; sourceCode += "light";
sourceCode += " += specular * Lights[i].specular.xyz * MaterialSpecular.xyz;\n" sourceCode += " += specular * Lights[i].specular.rgb * MaterialSpecular.rgb;\n"
"}\n"; "}\n";
if (glsl140) if (glsl140)
@ -184,11 +184,11 @@ namespace
"vec3 lightDir = Lights[i].parameters1.xyz - vWorldPos;\n" "vec3 lightDir = Lights[i].parameters1.xyz - vWorldPos;\n"
"\n" "\n"
"float att = max(Lights[i].parameters1.w - Lights[i].parameters2.x*length(lightDir), 0.0);\n" "float att = max(Lights[i].parameters1.w - Lights[i].parameters2.x*length(lightDir), 0.0);\n"
"light += att * Lights[i].ambient.xyz * (MaterialAmbient.xyz + SceneAmbient.xyz);\n" "light += att * Lights[i].ambient.rgb * (MaterialAmbient.rgb + SceneAmbient.rgb);\n"
"\n" "\n"
"lightDir = normalize(lightDir);\n" "lightDir = normalize(lightDir);\n"
"float lambert = max(dot(normal, lightDir), 0.0);\n" "float lambert = max(dot(normal, lightDir), 0.0);\n"
"light += att * lambert * Lights[i].diffuse.xyz * MaterialDiffuse.xyz;\n" "light += att * lambert * Lights[i].diffuse.rgb * MaterialDiffuse.rgb;\n"
"\n" "\n"
"if (MaterialShininess > 0.0)\n" "if (MaterialShininess > 0.0)\n"
"{\n" "{\n"
@ -202,7 +202,7 @@ namespace
else else
sourceCode += "light"; sourceCode += "light";
sourceCode += " += att * specular * Lights[i].specular.xyz * MaterialSpecular.xyz;\n" sourceCode += " += att * specular * Lights[i].specular.rgb * MaterialSpecular.rgb;\n"
"}\n"; "}\n";
if (glsl140) if (glsl140)
@ -223,7 +223,7 @@ namespace
"vec3 lightDir = Lights[i].parameters1.xyz - vWorldPos;\n" "vec3 lightDir = Lights[i].parameters1.xyz - vWorldPos;\n"
"\n" "\n"
"float att = max(Lights[i].parameters1.w - Lights[i].parameters2.w*length(lightDir), 0.0);\n" "float att = max(Lights[i].parameters1.w - Lights[i].parameters2.w*length(lightDir), 0.0);\n"
"light += att * Lights[i].ambient.xyz * (MaterialAmbient.xyz + SceneAmbient.xyz);\n" "light += att * Lights[i].ambient.rgb * (MaterialAmbient.rgb + SceneAmbient.rgb);\n"
"\n" "\n"
"lightDir = normalize(lightDir);\n" "lightDir = normalize(lightDir);\n"
"\n" "\n"
@ -232,7 +232,7 @@ namespace
"float innerMinusOuterAngle = Lights[i].parameters3.x - outerAngle;\n" "float innerMinusOuterAngle = Lights[i].parameters3.x - outerAngle;\n"
"float lambert = max(dot(normal, lightDir), 0.0);\n" "float lambert = max(dot(normal, lightDir), 0.0);\n"
"float spot = max((curAngle - outerAngle) / innerMinusOuterAngle, 0.0);\n" "float spot = max((curAngle - outerAngle) / innerMinusOuterAngle, 0.0);\n"
"light += att * lambert * spot * Lights[i].diffuse.xyz * MaterialDiffuse.xyz;\n" "light += att * lambert * spot * Lights[i].diffuse.rgb * MaterialDiffuse.rgb;\n"
"\n" "\n"
"if (MaterialShininess > 0.0)\n" "if (MaterialShininess > 0.0)\n"
"{\n" "{\n"
@ -246,7 +246,7 @@ namespace
else else
sourceCode += "light"; sourceCode += "light";
sourceCode += " += att * specular * spot * Lights[i].specular.xyz * MaterialSpecular.xyz;\n" sourceCode += " += att * specular * spot * Lights[i].specular.rgb * MaterialSpecular.rgb;\n"
"}\n"; "}\n";
if (glsl140) if (glsl140)
@ -269,7 +269,7 @@ namespace
sourceCode += "*texture2D(MaterialDiffuseMap, vTexCoord)"; sourceCode += "*texture2D(MaterialDiffuseMap, vTexCoord)";
if (flags & nzShaderBuilder_SpecularMapping) if (flags & nzShaderBuilder_SpecularMapping)
sourceCode += " + vec4(light, MaterialDiffuse.w)*texture2D(MaterialSpecularMap, vTexCoord)"; // Utiliser MaterialSpecular.w n'aurait aucun sens sourceCode += " + vec4(si, MaterialDiffuse.w)*texture2D(MaterialSpecularMap, vTexCoord)"; // Utiliser MaterialSpecular.w n'aurait aucun sens
sourceCode += ";\n"; sourceCode += ";\n";
} }
@ -401,6 +401,13 @@ namespace
return nullptr; return nullptr;
} }
#ifdef NAZARA_DEBUG
NazaraNotice("Fragment shader source: ");
NazaraNotice(fragmentSource);
NazaraNotice("Vertex shader source: ");
NazaraNotice(vertexSource);
#endif
if (!shader->Compile()) if (!shader->Compile())
{ {
NazaraError("Failed to compile shader: " + shader->GetLog()); NazaraError("Failed to compile shader: " + shader->GetLog());