Added normal mapping

Former-commit-id: 7e54b1f01de7d5cf99c42d08d13ba606f73c453d
This commit is contained in:
Lynix
2013-01-09 01:36:18 +01:00
parent 946754d7be
commit e3293c6fe1
3 changed files with 141 additions and 15 deletions

View File

@@ -79,23 +79,30 @@ namespace
if (flags & nzShaderBuilder_Lighting)
{
if (flags & nzShaderBuilder_NormalMapping)
sourceCode += "uniform sampler2D MaterialNormalMap;\n";
sourceCode += "uniform float MaterialShininess;\n"
"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";
}
sourceCode += '\n';
/********************Entrant********************/
if (flags & nzShaderBuilder_Lighting)
sourceCode += inKW + " vec3 vNormal;\n";
{
if (flags & nzShaderBuilder_NormalMapping)
sourceCode += inKW + " mat3 vLightToWorld;\n";
if (flags & nzShaderBuilder_DiffuseMapping)
sourceCode += inKW + " vec3 vNormal;\n";
}
if (flags & nzShaderBuilder_DiffuseMapping || flags & nzShaderBuilder_NormalMapping)
sourceCode += inKW + " vec2 vTexCoord;\n";
if (flags & nzShaderBuilder_Lighting)
@@ -120,8 +127,12 @@ namespace
if (flags & nzShaderBuilder_SpecularMapping)
sourceCode += "vec3 si = vec3(0.0, 0.0, 0.0);\n";
sourceCode += "vec3 normal = normalize(vNormal);\n"
"\n"
if (flags & nzShaderBuilder_NormalMapping)
sourceCode += "vec3 normal = normalize(vLightToWorld * (2.0 * vec3(texture2D(MaterialNormalMap, vTexCoord)) - 1.0));\n";
else
sourceCode += "vec3 normal = normalize(vNormal);\n";
sourceCode += "\n"
"for (int i = 0; i < LightCount; ++i)\n"
"{\n";
@@ -303,10 +314,10 @@ namespace
sourceCode += inKW + " vec3 VertexPosition;\n";
if (flags & nzShaderBuilder_Lighting)
{
sourceCode += inKW + " vec3 VertexNormal;\n";
if (flags & nzShaderBuilder_Lighting)
sourceCode += inKW + " vec3 VertexTangent;\n";
}
if (flags & nzShaderBuilder_DiffuseMapping)
sourceCode += inKW + " vec2 VertexTexCoord0;\n";
@@ -315,9 +326,14 @@ namespace
/********************Sortant********************/
if (flags & nzShaderBuilder_Lighting)
sourceCode += outKW + " vec3 vNormal;\n";
{
if (flags & nzShaderBuilder_NormalMapping)
sourceCode += outKW + " mat3 vLightToWorld;";
if (flags & nzShaderBuilder_DiffuseMapping)
sourceCode += outKW + " vec3 vNormal;\n";
}
if (flags & nzShaderBuilder_DiffuseMapping || flags & nzShaderBuilder_NormalMapping)
sourceCode += outKW + " vec2 vTexCoord;\n";
if (flags & nzShaderBuilder_Lighting)
@@ -331,9 +347,23 @@ namespace
"gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n";
if (flags & nzShaderBuilder_Lighting)
sourceCode += "vNormal = normalize(mat3(WorldMatrix) * VertexNormal);\n";
{
sourceCode += "mat3 RotationMatrix = mat3(WorldMatrix);\n";
if (flags & nzShaderBuilder_DiffuseMapping)
if (flags & nzShaderBuilder_NormalMapping)
{
sourceCode += "\n"
"vec3 binormal = cross(VertexNormal, VertexTangent);\n"
"vLightToWorld[0] = VertexTangent * RotationMatrix;\n"
"vLightToWorld[1] = binormal * RotationMatrix;\n"
"vLightToWorld[2] = normalize(VertexNormal * RotationMatrix);\n"
"\n";
}
sourceCode += "vNormal = normalize(RotationMatrix * VertexNormal);\n";
}
if (flags & nzShaderBuilder_DiffuseMapping || flags & nzShaderBuilder_NormalMapping)
sourceCode += "vTexCoord = VertexTexCoord0;\n";
if (flags & nzShaderBuilder_Lighting)