summaryrefslogtreecommitdiffstats
path: root/src/render
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
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')
-rw-r--r--src/render/render.pro2
-rw-r--r--src/render/render.qrc2
-rw-r--r--src/render/shaders/phong.frag45
-rw-r--r--src/render/shaders/phong.vert19
4 files changed, 67 insertions, 1 deletions
diff --git a/src/render/render.pro b/src/render/render.pro
index ad4f5870f..61b33774e 100644
--- a/src/render/render.pro
+++ b/src/render/render.pro
@@ -17,7 +17,7 @@ include(../3rdparty/assimp/assimp.pri)
RESOURCES += $$PWD/render.qrc
OTHER_FILES += \
- $$PWD/shaders/*
+ $$PWD/shaders/* \
gcov {
CONFIG += static
diff --git a/src/render/render.qrc b/src/render/render.qrc
index fde4905a7..a66d24c11 100644
--- a/src/render/render.qrc
+++ b/src/render/render.qrc
@@ -4,5 +4,7 @@
<file>shaders/basic.vert</file>
<file>shaders/diffuse.frag</file>
<file>shaders/diffuse.vert</file>
+ <file>shaders/phong.frag</file>
+ <file>shaders/phong.vert</file>
</qresource>
</RCC>
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 );
+}