From b4dda045a6723f50dc3bf73a11def7ec94c6f30f Mon Sep 17 00:00:00 2001 From: scrawl <scrawl@baseoftrash.de> Date: Tue, 22 Mar 2016 21:12:16 +0100 Subject: [PATCH] Pass the tangent in object space --- files/shaders/objects_fragment.glsl | 16 +++++++++------- files/shaders/objects_vertex.glsl | 8 ++++---- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/files/shaders/objects_fragment.glsl b/files/shaders/objects_fragment.glsl index 2304d9ade..877e881f6 100644 --- a/files/shaders/objects_fragment.glsl +++ b/files/shaders/objects_fragment.glsl @@ -28,7 +28,7 @@ varying vec2 emissiveMapUV; #if @normalMap uniform sampler2D normalMap; varying vec2 normalMapUV; -varying vec3 viewTangent; +varying vec3 passTangent; #endif #if @envMap @@ -52,7 +52,7 @@ varying vec4 lighting; varying vec4 passColor; #endif varying vec3 passViewPos; -varying vec3 passViewNormal; +varying vec3 passNormal; #include "lighting.glsl" @@ -77,15 +77,17 @@ void main() gl_FragData[0].xyz = mix(gl_FragData[0].xyz, decalTex.xyz, decalTex.a); #endif - vec3 viewNormal = passViewNormal; - #if @normalMap vec3 normalTex = texture2D(normalMap, normalMapUV).xyz; - vec3 viewBinormal = cross(viewTangent, viewNormal); - mat3 tbn = mat3(viewTangent, viewBinormal, viewNormal); + vec3 normalizedNormal = normalize(passNormal); + vec3 normalizedTangent = normalize(passTangent); + vec3 binormal = cross(normalizedTangent, normalizedNormal); + mat3 tbn = mat3(normalizedTangent, binormal, normalizedNormal); - viewNormal = normalize(tbn * (normalTex * 2.0 - 1.0)); + vec3 viewNormal = gl_NormalMatrix * normalize(tbn * (normalTex * 2.0 - 1.0)); +#else + vec3 viewNormal = gl_NormalMatrix * normalize(passNormal); #endif diff --git a/files/shaders/objects_vertex.glsl b/files/shaders/objects_vertex.glsl index b65e49666..9aabbe696 100644 --- a/files/shaders/objects_vertex.glsl +++ b/files/shaders/objects_vertex.glsl @@ -22,7 +22,7 @@ varying vec2 emissiveMapUV; #if @normalMap varying vec2 normalMapUV; -varying vec3 viewTangent; +varying vec3 passTangent; #endif #if @envMap @@ -43,7 +43,7 @@ varying vec4 lighting; varying vec4 passColor; #endif varying vec3 passViewPos; -varying vec3 passViewNormal; +varying vec3 passNormal; #include "lighting.glsl" @@ -85,7 +85,7 @@ void main(void) #if @normalMap normalMapUV = (gl_TextureMatrix[@normalMapUV] * gl_MultiTexCoord@normalMapUV).xy; - viewTangent = normalize(gl_NormalMatrix * gl_MultiTexCoord7.xyz); + passTangent = gl_MultiTexCoord7.xyz; #endif #if @specularMap @@ -98,5 +98,5 @@ void main(void) passColor = gl_Color; #endif passViewPos = viewPos.xyz; - passViewNormal = viewNormal; + passNormal = gl_Normal.xyz; }