summaryrefslogtreecommitdiffstats
path: root/src/render/shaders/gl3
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-12-09 16:21:04 +0100
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-12-10 11:54:28 +0000
commit5e94c15ddc89779c6da7ae919985688173a4d20d (patch)
treee9efeba287fab6c234d6e6ab1b3274478e7092d8 /src/render/shaders/gl3
parent2dec7715ed977e5cafdd35543538e104e1ccadf9 (diff)
Do lighting calculation in world space
As opposed to (mostly) camera space. Oops. While somewhat hidden with point lights, the problem became apparent with directional lights. Now that we have proper directional lights, change the default light, that is used when no light components are specified at all, from point to directional since this is cheaper and provides less surprises with arbitrary scenes. Also remove the duplicate phongalpha vertex shader in the process. Change-Id: I295660a1400b16b69e1516672e31794312ee48d1 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/render/shaders/gl3')
-rw-r--r--src/render/shaders/gl3/diffusemap.frag6
-rw-r--r--src/render/shaders/gl3/diffusemap.vert12
-rw-r--r--src/render/shaders/gl3/diffusespecularmap.frag6
-rw-r--r--src/render/shaders/gl3/gooch.frag6
-rw-r--r--src/render/shaders/gl3/gooch.vert12
-rw-r--r--src/render/shaders/gl3/normaldiffusemap.frag4
-rw-r--r--src/render/shaders/gl3/normaldiffusemap.vert15
-rw-r--r--src/render/shaders/gl3/normaldiffusemapalpha.frag4
-rw-r--r--src/render/shaders/gl3/normaldiffusespecularmap.frag4
-rw-r--r--src/render/shaders/gl3/pervertexcolor.frag6
-rw-r--r--src/render/shaders/gl3/pervertexcolor.vert12
-rw-r--r--src/render/shaders/gl3/phong.frag6
-rw-r--r--src/render/shaders/gl3/phong.vert12
-rw-r--r--src/render/shaders/gl3/phongalpha.frag6
-rw-r--r--src/render/shaders/gl3/phongalpha.vert19
15 files changed, 55 insertions, 75 deletions
diff --git a/src/render/shaders/gl3/diffusemap.frag b/src/render/shaders/gl3/diffusemap.frag
index 5e6266fd3..7810fdb68 100644
--- a/src/render/shaders/gl3/diffusemap.frag
+++ b/src/render/shaders/gl3/diffusemap.frag
@@ -8,8 +8,8 @@ uniform vec3 eyePosition;
uniform sampler2D diffuseTexture;
-in vec3 position;
-in vec3 normal;
+in vec3 worldPosition;
+in vec3 worldNormal;
in vec2 texCoord;
out vec4 fragColor;
@@ -21,7 +21,7 @@ void main()
vec3 diffuseTextureColor = texture( diffuseTexture, texCoord ).rgb;
vec3 diffuseColor, specularColor;
- adsModel(position, normal, eyePosition, shininess, diffuseColor, specularColor);
+ adsModel(worldPosition, worldNormal, eyePosition, shininess, diffuseColor, specularColor);
fragColor = vec4( diffuseTextureColor * ( ka + diffuseColor ) + ks * specularColor, 1.0 );
}
diff --git a/src/render/shaders/gl3/diffusemap.vert b/src/render/shaders/gl3/diffusemap.vert
index 2b27413a5..439be6e99 100644
--- a/src/render/shaders/gl3/diffusemap.vert
+++ b/src/render/shaders/gl3/diffusemap.vert
@@ -4,12 +4,12 @@ in vec3 vertexPosition;
in vec3 vertexNormal;
in vec2 vertexTexCoord;
-out vec3 position;
-out vec3 normal;
+out vec3 worldPosition;
+out vec3 worldNormal;
out vec2 texCoord;
-uniform mat4 modelView;
-uniform mat3 modelViewNormal;
+uniform mat4 modelMatrix;
+uniform mat3 modelNormalMatrix;
uniform mat4 mvp;
uniform float texCoordScale;
@@ -17,8 +17,8 @@ uniform float texCoordScale;
void main()
{
texCoord = vertexTexCoord * texCoordScale;
- normal = normalize( modelViewNormal * vertexNormal );
- position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
+ worldNormal = normalize( modelNormalMatrix * vertexNormal );
+ worldPosition = vec3( modelMatrix * vec4( vertexPosition, 1.0 ) );
gl_Position = mvp * vec4( vertexPosition, 1.0 );
}
diff --git a/src/render/shaders/gl3/diffusespecularmap.frag b/src/render/shaders/gl3/diffusespecularmap.frag
index 98ef53040..fb809393a 100644
--- a/src/render/shaders/gl3/diffusespecularmap.frag
+++ b/src/render/shaders/gl3/diffusespecularmap.frag
@@ -9,8 +9,8 @@ uniform vec3 eyePosition;
uniform sampler2D diffuseTexture;
uniform sampler2D specularTexture;
-in vec3 position;
-in vec3 normal;
+in vec3 worldPosition;
+in vec3 worldNormal;
in vec2 texCoord;
out vec4 fragColor;
@@ -23,7 +23,7 @@ void main()
vec3 specularTextureColor = texture( specularTexture, texCoord ).rgb;
vec3 diffuseColor, specularColor;
- adsModel(position, normal, eyePosition, shininess, diffuseColor, specularColor);
+ adsModel(worldPosition, worldNormal, eyePosition, shininess, diffuseColor, specularColor);
fragColor = vec4( diffuseTextureColor * ( ka + diffuseColor ) + specularTextureColor * specularColor, 1.0 );
}
diff --git a/src/render/shaders/gl3/gooch.frag b/src/render/shaders/gl3/gooch.frag
index 14c4c714a..1beab1c01 100644
--- a/src/render/shaders/gl3/gooch.frag
+++ b/src/render/shaders/gl3/gooch.frag
@@ -11,8 +11,8 @@ uniform float shininess; // Specular shininess factor
uniform vec3 eyePosition;
-in vec3 position;
-in vec3 normal;
+in vec3 worldPosition;
+in vec3 worldNormal;
out vec4 fragColor;
@@ -60,5 +60,5 @@ vec3 goochModel( const in vec3 pos, const in vec3 n )
void main()
{
- fragColor = vec4( goochModel( position, normalize( normal ) ), 1.0 );
+ fragColor = vec4( goochModel( worldPosition, normalize( worldNormal ) ), 1.0 );
}
diff --git a/src/render/shaders/gl3/gooch.vert b/src/render/shaders/gl3/gooch.vert
index c0f907f29..5230fb70e 100644
--- a/src/render/shaders/gl3/gooch.vert
+++ b/src/render/shaders/gl3/gooch.vert
@@ -3,17 +3,17 @@
in vec3 vertexPosition;
in vec3 vertexNormal;
-out vec3 position;
-out vec3 normal;
+out vec3 worldPosition;
+out vec3 worldNormal;
-uniform mat4 modelView;
-uniform mat3 modelViewNormal;
+uniform mat4 modelMatrix;
+uniform mat3 modelNormalMatrix;
uniform mat4 mvp;
void main()
{
- normal = normalize( modelViewNormal * vertexNormal );
- position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
+ worldNormal = normalize( modelNormalMatrix * vertexNormal );
+ worldPosition = vec3( modelMatrix * vec4( vertexPosition, 1.0 ) );
gl_Position = mvp * vec4( vertexPosition, 1.0 );
}
diff --git a/src/render/shaders/gl3/normaldiffusemap.frag b/src/render/shaders/gl3/normaldiffusemap.frag
index 4b61813c5..a99a7ed73 100644
--- a/src/render/shaders/gl3/normaldiffusemap.frag
+++ b/src/render/shaders/gl3/normaldiffusemap.frag
@@ -1,6 +1,6 @@
#version 150 core
-in vec3 position;
+in vec3 worldPosition;
in vec2 texCoord;
in mat3 tangentMatrix;
@@ -26,7 +26,7 @@ void main()
// Calculate the lighting model, keeping the specular component separate
vec3 diffuseColor, specularColor;
- adsModelNormalMapped(position, normal, eyePosition, shininess, tangentMatrix, diffuseColor, specularColor);
+ adsModelNormalMapped(worldPosition, normal, eyePosition, shininess, tangentMatrix, diffuseColor, specularColor);
// Combine spec with ambient+diffuse for final fragment color
fragColor = vec4( ka + diffuseTextureColor.rgb * diffuseColor + ks * specularColor, 1.0 );
diff --git a/src/render/shaders/gl3/normaldiffusemap.vert b/src/render/shaders/gl3/normaldiffusemap.vert
index 8b3a0716f..306a562fb 100644
--- a/src/render/shaders/gl3/normaldiffusemap.vert
+++ b/src/render/shaders/gl3/normaldiffusemap.vert
@@ -5,13 +5,12 @@ in vec3 vertexNormal;
in vec2 vertexTexCoord;
in vec4 vertexTangent;
-out vec3 position;
+out vec3 worldPosition;
out vec2 texCoord;
out mat3 tangentMatrix;
-uniform mat4 modelView;
-uniform mat3 modelViewNormal;
-uniform mat4 projectionMatrix;
+uniform mat4 modelMatrix;
+uniform mat3 modelNormalMatrix;
uniform mat4 mvp;
uniform float texCoordScale;
@@ -21,10 +20,10 @@ void main()
// Pass through texture coordinates
texCoord = vertexTexCoord * texCoordScale;
- // Transform position, normal, and tangent to eye coords
- vec3 normal = normalize( modelViewNormal * vertexNormal );
- vec3 tangent = normalize( modelViewNormal * vertexTangent.xyz );
- position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
+ // Transform position, normal, and tangent to world coords
+ vec3 normal = normalize( modelNormalMatrix * vertexNormal );
+ vec3 tangent = normalize( modelNormalMatrix * vertexTangent.xyz );
+ worldPosition = vec3( modelMatrix * vec4( vertexPosition, 1.0 ) );
// Calculate binormal vector
vec3 binormal = normalize( cross( normal, tangent ) );
diff --git a/src/render/shaders/gl3/normaldiffusemapalpha.frag b/src/render/shaders/gl3/normaldiffusemapalpha.frag
index 28e597b16..ce5cf0e90 100644
--- a/src/render/shaders/gl3/normaldiffusemapalpha.frag
+++ b/src/render/shaders/gl3/normaldiffusemapalpha.frag
@@ -1,6 +1,6 @@
#version 150 core
-in vec3 position;
+in vec3 worldPosition;
in vec2 texCoord;
in mat3 tangentMatrix;
@@ -26,7 +26,7 @@ void main()
// Calculate the lighting model, keeping the specular component separate
vec3 diffuseColor, specularColor;
- adsModelNormalMapped(position, normal, eyePosition, shininess, tangentMatrix, diffuseColor, specularColor);
+ adsModelNormalMapped(worldPosition, normal, eyePosition, shininess, tangentMatrix, diffuseColor, specularColor);
// Combine spec with ambient+diffuse for final fragment color
// Use the alpha from the diffuse texture (for alpha to coverage)
diff --git a/src/render/shaders/gl3/normaldiffusespecularmap.frag b/src/render/shaders/gl3/normaldiffusespecularmap.frag
index d6a5f44ae..b62932ffd 100644
--- a/src/render/shaders/gl3/normaldiffusespecularmap.frag
+++ b/src/render/shaders/gl3/normaldiffusespecularmap.frag
@@ -1,6 +1,6 @@
#version 150 core
-in vec3 position;
+in vec3 worldPosition;
in vec2 texCoord;
in mat3 tangentMatrix;
@@ -27,7 +27,7 @@ void main()
// Calculate the lighting model, keeping the specular component separate
vec3 diffuseColor, specularColor;
- adsModelNormalMapped(position, normal, eyePosition, shininess, tangentMatrix, diffuseColor, specularColor);
+ adsModelNormalMapped(worldPosition, normal, eyePosition, shininess, tangentMatrix, diffuseColor, specularColor);
// Combine spec with ambient+diffuse for final fragment color
fragColor = vec4( ka + diffuseTextureColor.rgb * diffuseColor + specularTextureColor.rgb * specularColor, 1.0 );
diff --git a/src/render/shaders/gl3/pervertexcolor.frag b/src/render/shaders/gl3/pervertexcolor.frag
index 14efdd8af..b5ed5a33d 100644
--- a/src/render/shaders/gl3/pervertexcolor.frag
+++ b/src/render/shaders/gl3/pervertexcolor.frag
@@ -1,7 +1,7 @@
#version 150 core
-in vec3 position;
-in vec3 normal;
+in vec3 worldPosition;
+in vec3 worldNormal;
in vec3 color;
out vec4 fragColor;
@@ -11,6 +11,6 @@ out vec4 fragColor;
void main()
{
vec3 diffuseColor;
- adModel(position, normal, diffuseColor);
+ adModel(worldPosition, worldNormal, diffuseColor);
fragColor = vec4( color + color * diffuseColor, 1.0 );
}
diff --git a/src/render/shaders/gl3/pervertexcolor.vert b/src/render/shaders/gl3/pervertexcolor.vert
index b6b1a5da7..87713a520 100644
--- a/src/render/shaders/gl3/pervertexcolor.vert
+++ b/src/render/shaders/gl3/pervertexcolor.vert
@@ -4,18 +4,18 @@ in vec3 vertexPosition;
in vec3 vertexNormal;
in vec3 vertexColor;
-out vec3 position;
-out vec3 normal;
+out vec3 worldPosition;
+out vec3 worldNormal;
out vec3 color;
-uniform mat4 modelView;
-uniform mat3 modelViewNormal;
+uniform mat4 modelMatrix;
+uniform mat3 modelNormalMatrix;
uniform mat4 mvp;
void main()
{
- normal = normalize( modelViewNormal * vertexNormal );
- position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
+ worldNormal = normalize( modelNormalMatrix * vertexNormal );
+ worldPosition = vec3( modelMatrix * vec4( vertexPosition, 1.0 ) );
color = vertexColor;
gl_Position = mvp * vec4( vertexPosition, 1.0 );
diff --git a/src/render/shaders/gl3/phong.frag b/src/render/shaders/gl3/phong.frag
index 26a06fb91..a4d7e0969 100644
--- a/src/render/shaders/gl3/phong.frag
+++ b/src/render/shaders/gl3/phong.frag
@@ -7,8 +7,8 @@ uniform float shininess; // Specular shininess factor
uniform vec3 eyePosition;
-in vec3 position;
-in vec3 normal;
+in vec3 worldPosition;
+in vec3 worldNormal;
out vec4 fragColor;
@@ -17,6 +17,6 @@ out vec4 fragColor;
void main()
{
vec3 diffuseColor, specularColor;
- adsModel(position, normal, eyePosition, shininess, diffuseColor, specularColor);
+ adsModel(worldPosition, worldNormal, eyePosition, shininess, diffuseColor, specularColor);
fragColor = vec4( ka + kd * diffuseColor + ks * specularColor, 1.0 );
}
diff --git a/src/render/shaders/gl3/phong.vert b/src/render/shaders/gl3/phong.vert
index f0a134702..cdb3c70e9 100644
--- a/src/render/shaders/gl3/phong.vert
+++ b/src/render/shaders/gl3/phong.vert
@@ -3,17 +3,17 @@
in vec3 vertexPosition;
in vec3 vertexNormal;
-out vec3 position;
-out vec3 normal;
+out vec3 worldPosition;
+out vec3 worldNormal;
-uniform mat4 modelView;
-uniform mat3 modelViewNormal;
+uniform mat4 modelMatrix;
+uniform mat3 modelNormalMatrix;
uniform mat4 modelViewProjection;
void main()
{
- normal = normalize( modelViewNormal * vertexNormal );
- position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
+ worldNormal = normalize( modelNormalMatrix * vertexNormal );
+ worldPosition = vec3( modelMatrix * vec4( vertexPosition, 1.0 ) );
gl_Position = modelViewProjection * vec4( vertexPosition, 1.0 );
}
diff --git a/src/render/shaders/gl3/phongalpha.frag b/src/render/shaders/gl3/phongalpha.frag
index 1da32c701..cb019e9aa 100644
--- a/src/render/shaders/gl3/phongalpha.frag
+++ b/src/render/shaders/gl3/phongalpha.frag
@@ -9,8 +9,8 @@ uniform float alpha;
uniform vec3 eyePosition;
-in vec3 position;
-in vec3 normal;
+in vec3 worldPosition;
+in vec3 worldNormal;
out vec4 fragColor;
@@ -19,6 +19,6 @@ out vec4 fragColor;
void main()
{
vec3 diffuseColor, specularColor;
- adsModel(position, normal, eyePosition, shininess, diffuseColor, specularColor);
+ adsModel(worldPosition, worldNormal, eyePosition, shininess, diffuseColor, specularColor);
fragColor = vec4( ka + kd * diffuseColor + ks * specularColor, alpha );
}
diff --git a/src/render/shaders/gl3/phongalpha.vert b/src/render/shaders/gl3/phongalpha.vert
deleted file mode 100644
index c0f907f29..000000000
--- a/src/render/shaders/gl3/phongalpha.vert
+++ /dev/null
@@ -1,19 +0,0 @@
-#version 150 core
-
-in vec3 vertexPosition;
-in vec3 vertexNormal;
-
-out vec3 position;
-out vec3 normal;
-
-uniform mat4 modelView;
-uniform mat3 modelViewNormal;
-uniform mat4 mvp;
-
-void main()
-{
- normal = normalize( modelViewNormal * vertexNormal );
- position = vec3( modelView * vec4( vertexPosition, 1.0 ) );
-
- gl_Position = mvp * vec4( vertexPosition, 1.0 );
-}