let pointlight_or_not = true;
createCanvas(windowWidth*0.9, windowHeight*0.9, WEBGL);
camera(0, -80, 250, 0, 0, 0, 0, 1, 0);
light_pos = createVector(180, 0, 0)
shadow_map = createGraphics(1024, 1024, WEBGL);
shadow_shader = shadow_map.createShader(shadow_vert, shadow_frag);
shadow_map.shader(shadow_shader);
main_shader = createShader(lighting_shader + vert, frag);
radio.option('Use Point Light');
radio.option('Use Directional Light');
radio.selected('Use Point Light');
pointlight_or_not = radio.value() == 'Use Point Light' ? true : false;
light_pos.set(180*cos(millis()/1000.0), -180*sin(millis()/1000.0), 0);
shadow_map.camera(light_pos.x, light_pos.y, light_pos.z, 0, 0, 0, -sin(millis()/1000.0), -cos(millis()/1000.0), 0);
if (pointlight_or_not == true) {
shadow_map.perspective(HALF_PI, 1.0, 0.001, 1000.0);
shadow_map.ortho(-width/2, width/2, height/2, -height/2, 0.001, 1000);
shadow_shader.setUniform("uUsePointlight", pointlight_or_not);
shadow_map.rotateX(HALF_PI);
mvMatrixs.push(shadow_map._renderer.uMVMatrix.mat4);
shadow_map.plane(1, 1, 80, 80);
shadow_map.fill(255, 0, 0);
shadow_map.translate(-50, -80, 0);
mvMatrixs.push(shadow_map._renderer.uMVMatrix.mat4);
shadow_map.torus(1, 0.5, 40, 40);
shadow_map.fill(0, 255, 0);
shadow_map.translate(-10, -20, 80);
mvMatrixs.push(shadow_map._renderer.uMVMatrix.mat4);
shadow_map.box(1, 1, 1, 40, 40);
shadow_map.fill(0, 0, 255);
shadow_map.translate(50, -30, 30);
mvMatrixs.push(shadow_map._renderer.uMVMatrix.mat4);
shadow_map.sphere(1, 40, 40);
main_shader.setUniform("uUsePointlight", pointlight_or_not);
main_shader.setUniform("uShadow", shadow_map);
main_shader.setUniform("uShadowPMatrix", shadow_map._renderer.uPMatrix.mat4);
if (pointlight_or_not == 1) {
pointLight(255, 255, 255, light_pos);
directionalLight(255, 255, 255, -light_pos.x, -light_pos.y, 0);
main_shader.setUniform("uShadowMVMatrix", mvMatrixs[0]);
main_shader.setUniform("uShadowMVMatrix", mvMatrixs[1]);
main_shader.setUniform("uShadowMVMatrix", mvMatrixs[2]);
main_shader.setUniform("uShadowMVMatrix", mvMatrixs[3]);