Added specular mapping
Former-commit-id: 329bcfc6b3d92809538c9416578329f11c6ef56f
This commit is contained in:
parent
81472079c4
commit
946754d7be
|
|
@ -152,7 +152,8 @@ enum nzShaderBuilderFlags
|
|||
nzShaderBuilder_Instancing = 0x04,
|
||||
nzShaderBuilder_Lighting = 0x08,
|
||||
nzShaderBuilder_NormalMapping = 0x10,
|
||||
nzShaderBuilder_ParallaxMapping = 0x20
|
||||
nzShaderBuilder_ParallaxMapping = 0x20,
|
||||
nzShaderBuilder_SpecularMapping = 0x40
|
||||
};
|
||||
|
||||
enum nzShaderLanguage
|
||||
|
|
|
|||
|
|
@ -83,8 +83,8 @@ namespace
|
|||
"uniform vec4 MaterialSpecular;\n";
|
||||
}
|
||||
|
||||
/*if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += "uniform sampler2D MaterialSpecularMap;\n";*/
|
||||
if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += "uniform sampler2D MaterialSpecularMap;\n";
|
||||
|
||||
if (flags & nzShaderBuilder_Lighting)
|
||||
sourceCode += "uniform vec4 SceneAmbient;\n";
|
||||
|
|
@ -115,8 +115,12 @@ namespace
|
|||
|
||||
if (flags & nzShaderBuilder_Lighting)
|
||||
{
|
||||
sourceCode += "vec3 light = vec3(0.0, 0.0, 0.0);\n"
|
||||
"vec3 normal = normalize(vNormal);\n"
|
||||
sourceCode += "vec3 light = vec3(0.0, 0.0, 0.0);\n";
|
||||
|
||||
if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += "vec3 si = vec3(0.0, 0.0, 0.0);\n";
|
||||
|
||||
sourceCode += "vec3 normal = normalize(vNormal);\n"
|
||||
"\n"
|
||||
"for (int i = 0; i < LightCount; ++i)\n"
|
||||
"{\n";
|
||||
|
|
@ -143,8 +147,14 @@ namespace
|
|||
"vec3 eyeVec = normalize(CameraPosition - vWorldPos);\n"
|
||||
"vec3 reflection = reflect(-lightDir, normal);\n"
|
||||
"\n"
|
||||
"float specular = pow(max(dot(reflection, eyeVec), 0.0), MaterialShininess);\n"
|
||||
"light += specular * Lights[i].specular.xyz * MaterialSpecular.xyz;\n"
|
||||
"float specular = pow(max(dot(reflection, eyeVec), 0.0), MaterialShininess);\n";
|
||||
|
||||
if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += "si";
|
||||
else
|
||||
sourceCode += "light";
|
||||
|
||||
sourceCode += " += specular * Lights[i].specular.xyz * MaterialSpecular.xyz;\n"
|
||||
"}\n";
|
||||
|
||||
if (glsl140)
|
||||
|
|
@ -174,8 +184,14 @@ namespace
|
|||
"vec3 eyeVec = normalize(CameraPosition - vWorldPos);\n"
|
||||
"vec3 reflection = reflect(-lightDir, normal);\n"
|
||||
"\n"
|
||||
"float specular = pow(max(dot(reflection, eyeVec), 0.0), MaterialShininess);\n"
|
||||
"light += att * specular * Lights[i].specular.xyz * MaterialSpecular.xyz;\n"
|
||||
"float specular = pow(max(dot(reflection, eyeVec), 0.0), MaterialShininess);\n";
|
||||
|
||||
if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += "si";
|
||||
else
|
||||
sourceCode += "light";
|
||||
|
||||
sourceCode += " += att * specular * Lights[i].specular.xyz * MaterialSpecular.xyz;\n"
|
||||
"}\n";
|
||||
|
||||
if (glsl140)
|
||||
|
|
@ -212,8 +228,14 @@ namespace
|
|||
"vec3 eyeVec = normalize(CameraPosition - vWorldPos);\n"
|
||||
"vec3 reflection = reflect(-lightDir, normal);\n"
|
||||
"\n"
|
||||
"float specular = pow(max(dot(reflection, eyeVec), 0.0), MaterialShininess);\n"
|
||||
"light += att * specular * spot * Lights[i].specular.xyz * MaterialSpecular.xyz;\n"
|
||||
"float specular = pow(max(dot(reflection, eyeVec), 0.0), MaterialShininess);\n";
|
||||
|
||||
if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += "si";
|
||||
else
|
||||
sourceCode += "light";
|
||||
|
||||
sourceCode += " += att * specular * spot * Lights[i].specular.xyz * MaterialSpecular.xyz;\n"
|
||||
"}\n";
|
||||
|
||||
if (glsl140)
|
||||
|
|
@ -235,6 +257,9 @@ namespace
|
|||
if (flags & nzShaderBuilder_DiffuseMapping)
|
||||
sourceCode += "*texture2D(MaterialDiffuseMap, vTexCoord)";
|
||||
|
||||
if (flags & nzShaderBuilder_SpecularMapping)
|
||||
sourceCode += " + vec4(light, MaterialDiffuse.w)*texture2D(MaterialSpecularMap, vTexCoord)"; // Utiliser MaterialSpecular.w n'aurait aucun sens
|
||||
|
||||
sourceCode += ";\n";
|
||||
}
|
||||
else if (flags & nzShaderBuilder_DiffuseMapping)
|
||||
|
|
|
|||
Loading…
Reference in New Issue