diff options
Diffstat (limited to 'resources/shaders')
-rwxr-xr-x | resources/shaders/shader.frag | 10 | ||||
-rwxr-xr-x | resources/shaders/shader.vert | 7 |
2 files changed, 15 insertions, 2 deletions
diff --git a/resources/shaders/shader.frag b/resources/shaders/shader.frag index de063c2..d2183cc 100755 --- a/resources/shaders/shader.frag +++ b/resources/shaders/shader.frag @@ -2,6 +2,9 @@ out vec4 fragColor; in vec3 normal_cameraSpace; +in vec3 camera_worldSpace; +in vec3 normal_worldSpace; +in vec3 pos; uniform int wire = 0; uniform float red = 1.0; @@ -12,7 +15,10 @@ uniform float alpha = 1.0; void main() { // Do lighting in camera space vec3 lightDir = normalize(vec3(0, 0.5, 1)); - float c = clamp(dot(normal_cameraSpace, lightDir), 0, 1); + float d = clamp(dot(normal_cameraSpace, lightDir), 0, 1); + vec3 reflectedLight = lightDir - 2 * dot(lightDir, normal_worldSpace) * normal_worldSpace; + vec3 posToCam = normalize(camera_worldSpace - pos); + float spec = pow(dot(posToCam, reflectedLight), 2.f); - fragColor = vec4(red * c, green * c, blue * c, 1); + fragColor = clamp(0.5f * vec4(red * d, green * d, blue * d, 0.5f) + 0.5f * vec4(1, 1, 1, 1) * spec, 0, 1); } diff --git a/resources/shaders/shader.vert b/resources/shaders/shader.vert index 52b86ba..15e6833 100755 --- a/resources/shaders/shader.vert +++ b/resources/shaders/shader.vert @@ -6,13 +6,20 @@ layout(location = 1) in vec3 normal; // Normal of the vertex uniform mat4 proj; uniform mat4 view; uniform mat4 model; +uniform mat4 inverseView; uniform mat3 inverseTransposeModel; out vec3 normal_cameraSpace; +out vec3 normal_worldSpace; +out vec3 camera_worldSpace; +out vec3 pos; void main() { normal_cameraSpace = normalize(inverse(transpose(mat3(view))) * inverseTransposeModel * normal); + camera_worldSpace = vec3(inverseView * vec4(0.f, 0.f, 0.f, 1.f)); + normal_worldSpace = normal; + pos = position; gl_Position = proj * view * model * vec4(position, 1); } |