diff --git a/qglengine/core/glshaders_headers.h b/qglengine/core/glshaders_headers.h index 74d1d34..333e870 100644 --- a/qglengine/core/glshaders_headers.h +++ b/qglengine/core/glshaders_headers.h @@ -43,7 +43,8 @@ const char qgl_vertex_head[] = "flat out uint qgl_MaterialIndex;\n" "uniform mat4 qgl_ViewMatrix;\n" "uniform mat4 qgl_ViewProjMatrix;\n" - "mat3 qgl_getNormalMatrix() {return mat3(qgl_ViewMatrix * qgl_ModelMatrix);}\n" + "mat3 qgl_getNormalMatrix() {return inverse(mat3(qgl_ViewMatrix * qgl_ModelMatrix));}\n" + "mat3 qgl_getTangentMatrix() {return mat3(qgl_ViewMatrix * qgl_ModelMatrix);}\n" "vec4 qgl_ftransform() {return qgl_ViewProjMatrix * (qgl_ModelMatrix * vec4(qgl_Vertex, 1));}\n" ""; diff --git a/qglengine/shaders/ds_geom.glsl b/qglengine/shaders/ds_geom.glsl index f879f59..66e38f2 100644 --- a/qglengine/shaders/ds_geom.glsl +++ b/qglengine/shaders/ds_geom.glsl @@ -9,9 +9,8 @@ void main(void) { qgl_FragTexture = qgl_Texture; gl_Position = qgl_ftransform(); - mat3 nmat = qgl_getNormalMatrix(); - geom_normal = normalize(nmat * qgl_Normal); - TBN = nmat * mat3(qgl_Tangent, qgl_Bitangent, qgl_Normal); + geom_normal = normalize(qgl_Normal * qgl_getNormalMatrix()); + TBN = qgl_getTangentMatrix() * mat3(qgl_Tangent, qgl_Bitangent, qgl_Normal); object_color = qgl_ObjectColor; }