summaryrefslogtreecommitdiffstats
path: root/src/render/shaders
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2014-07-06 15:11:21 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-07-18 13:27:25 +0200
commit2dc04a6dc47ac1395254ba48eff02c24979f0579 (patch)
treeaebd30f1785c6498feced0ac979ec23b87e91157 /src/render/shaders
parent9bf4ff388888cbb853a2875a3a5bf02c034f029d (diff)
Add rollerball example to show rendering and physics basics
At present it only exercises the renderer but it will be extended to also cover the physics aspect too. Change-Id: I83217f09eeb3471b8a508fa8a8948410ad1e1d58 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/render/shaders')
-rw-r--r--src/render/shaders/phong.frag45
-rw-r--r--src/render/shaders/phong.vert19
2 files changed, 64 insertions, 0 deletions
diff --git a/src/render/shaders/phong.frag b/src/render/shaders/phong.frag
new file mode 100644
index 000000000..741f4da9f
--- /dev/null
+++ b/src/render/shaders/phong.frag
@@ -0,0 +1,45 @@
+#version 150 core
+
+// TODO: Replace with a uniform block
+uniform vec4 lightPosition = vec4(1.0, 1.0, 0.0, 1.0);
+uniform vec3 lightIntensity = vec3(1.0, 0.0, 1.0);
+
+// TODO: Replace with a struct
+uniform vec3 ka; // Ambient reflectivity
+uniform vec3 kd; // Diffuse reflectivity
+uniform vec3 ks; // Specular reflectivity
+uniform float shininess; // Specular shininess factor
+
+in vec3 position;
+in vec3 normal;
+
+out vec4 fragColor;
+
+vec3 adsModel( const in vec3 pos, const in vec3 n )
+{
+ // Calculate the vector from the light to the fragment
+ vec3 s = normalize( vec3( lightPosition ) - pos );
+
+ // Calculate the vector from the fragment to the eye position
+ // (origin since this is in "eye" or "camera" space)
+ vec3 v = normalize( -pos );
+
+ // Reflect the light beam using the normal at this fragment
+ vec3 r = reflect( -s, n );
+
+ // Calculate the diffuse component
+ float diffuse = max( dot( s, n ), 0.0 );
+
+ // Calculate the specular component
+ float specular = 0.0;
+ if ( dot( s, n ) > 0.0 )
+ specular = pow( max( dot( r, v ), 0.0 ), shininess );
+
+ // Combine the ambient, diffuse and specular contributions
+ return lightIntensity * ( ka + kd * diffuse + ks * specular );
+}
+
+void main()
+{
+ fragColor = vec4( adsModel( position, normalize( normal ) ), 1.0 );
+}
diff --git a/src/render/shaders/phong.vert b/src/render/shaders/phong.vert
new file mode 100644
index 000000000..c0f907f29
--- /dev/null
+++ b/src/render/shaders/phong.vert
@@ -0,0 +1,19 @@
+#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 );
+}