From 095707f0fb0d62421697d5bac6eb75a45d454602 Mon Sep 17 00:00:00 2001 From: "jorge.josegonc" <jorge.jose-goncalves@etu.hesge.ch> Date: Thu, 17 Dec 2020 09:42:28 +0100 Subject: [PATCH] problem directionnal and choose hourglass --- lab4/src/lab4.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lab4/src/lab4.js b/lab4/src/lab4.js index cdd4abf..3208e2d 100644 --- a/lab4/src/lab4.js +++ b/lab4/src/lab4.js @@ -56,16 +56,20 @@ var FSHADER_SOURCE = 'varying vec3 v_normal;\n' + 'varying vec4 v_VertexPosition;\n' + 'uniform vec3 u_LightPosition;\n' + + 'uniform vec3 u_AmbientLight;\n' + 'uniform vec3 u_LightColor;\n' + + 'uniform bool typeLight;\n' + + 'uniform vec3 u_lightDirection;\n' + 'void main() {\n' + + ' vec3 ambient = u_AmbientLight * v_Color.rgb;\n' + ' vec3 lightDirection = normalize(u_LightPosition - vec3(v_VertexPosition));\n' + - ' float nDotL = max(dot(v_normal, lightDirection), 0.0);\n' + + ' float nDotL = (typeLight) ? max(dot(v_normal, u_lightDirection), 0.0) : max(dot(v_normal, lightDirection), 0.0);\n' + ' vec3 diffuse = u_LightColor * v_Color.rgb * nDotL;\n' + ' vec3 shadowCoord = (v_PositionFromLight.xyz/v_PositionFromLight.w)/2.0 + 0.5;\n' + ' vec4 rgbaDepth = texture2D(u_ShadowMap, shadowCoord.xy);\n' + ' float depth = rgbaDepth.r;\n' + // Retrieve the z-value from R ' float visibility = (shadowCoord.z > depth + 0.005) ? 0.0 : 1.0;\n' + - ' gl_FragColor = vec4(diffuse * visibility, v_Color.a);\n' + + ' gl_FragColor = vec4(ambient + diffuse * visibility, v_Color.a);\n' + '}\n'; const PERSPECTIVE_WIDTH_FROM_LIGHT = 2048 @@ -91,6 +95,8 @@ var tmp_normalMatrix = new Matrix4(); var rotationSecFrustrumMatrix = new Matrix4(); var translateFrustrumMatrix = new Matrix4(); +var isDirectionnal = false; + // Event of key down, move camera or light positions document.addEventListener("keydown", (event) => { switch (event.key) { @@ -130,6 +136,8 @@ document.addEventListener("keydown", (event) => { case 'h': light_z -= STEP; break; + case 'x': + isDirectionnal = !isDirectionnal; default: break; } @@ -172,9 +180,12 @@ function main() { normalProgram.u_ModelMatrix = gl.getUniformLocation(normalProgram, 'u_ModelMatrix'); normalProgram.u_LightPosition = gl.getUniformLocation(normalProgram, 'u_LightPosition'); normalProgram.u_LightColor = gl.getUniformLocation(normalProgram, 'u_LightColor'); + normalProgram.u_AmbientLight = gl.getUniformLocation(normalProgram, 'u_AmbientLight'); + normalProgram.typeLight = gl.getUniformLocation(normalProgram, 'typeLight'); if (normalProgram.a_Position < 0 || normalProgram.a_Color < 0 || normalProgram.a_Normal < 0 || !normalProgram.u_MvpMatrix || !normalProgram.u_MvpMatrixFromLight || !normalProgram.u_ShadowMap || !normalProgram.u_Clicked || !normalProgram.u_NormalMatrix || - !normalProgram.u_ModelMatrix || !normalProgram.u_LightPosition || !normalProgram.u_LightColor) { + !normalProgram.u_ModelMatrix || !normalProgram.u_LightPosition || !normalProgram.u_LightColor || !normalProgram.u_AmbientLight || + !normalProgram.typeLight) { console.log('Failed to get the storage location of attribute or uniform variable from normalProgram'); return; } @@ -285,7 +296,12 @@ function main() { gl.useProgram(normalProgram); gl.uniform3f(normalProgram.u_LightColor, 1.0, 1.0, 1.0); // The light is white + gl.uniform3f(normalProgram.u_AmbientLight, 0.1, 0.1, 0.1); gl.uniform3f(normalProgram.u_LightPosition, light_x, light_y, light_z); + gl.uniform1i(normalProgram.typeLight, isDirectionnal); + var lightD = new Vector3([light_x, light_y, light_z]); + lightD.normalize(); + gl.uniform3fv(normalProgram.u_lightDirection, lightD.elements); gl.uniform1i(normalProgram.u_ShadowMap, 0); // Pass 0 because gl.TEXTURE0 is enabled // Draw the two frustrum and plane for the normal program -- GitLab