// scene/demo-specific variables go here let sunAngle = 0; let sunDirection = new THREE.Vector3(); let waterLevel = 400; let cameraUnderWater = 0.0; let PerlinNoiseTexture; // called automatically from within initTHREEjs() function (located in InitCommon.js file) function initSceneData() { demoFragmentShaderFileName = 'Terrain_Rendering_Fragment.glsl'; // scene/demo-specific three.js objects setup goes here sceneIsDynamic = true; cameraFlightSpeed = 300; // pixelRatio is resolution - range: 0.5(half resolution) to 1.0(full resolution) pixelRatio = mouseControl ? 0.7 : 0.75; EPS_intersect = 0.2; // set camera's field of view worldCamera.fov = 60; focusDistance = 3000.0; // position and orient camera cameraControlsObject.position.set(-837, 1350, 2156); cameraControlsYawObject.rotation.y = 0.0; cameraControlsPitchObject.rotation.x = 0.0; PerlinNoiseTexture = new THREE.TextureLoader().load('textures/perlin256.png'); PerlinNoiseTexture.wrapS = THREE.RepeatWrapping; PerlinNoiseTexture.wrapT = THREE.RepeatWrapping; PerlinNoiseTexture.flipY = false; PerlinNoiseTexture.minFilter = THREE.LinearFilter; PerlinNoiseTexture.magFilter = THREE.LinearFilter; PerlinNoiseTexture.generateMipmaps = false; // scene/demo-specific uniforms go here pathTracingUniforms.t_PerlinNoise = { value: PerlinNoiseTexture }; pathTracingUniforms.uCameraUnderWater = { value: 0.0 }; pathTracingUniforms.uWaterLevel = { value: 0.0 }; pathTracingUniforms.uSunDirection = { value: new THREE.Vector3() }; } // end function initSceneData() // called automatically from within the animate() function (located in InitCommon.js file) function updateVariablesAndUniforms() { // scene/demo-specific variables sunAngle = (elapsedTime * 0.035) % (Math.PI + 0.2) - 0.11; sunDirection.set(Math.cos(sunAngle), Math.sin(sunAngle), -Math.cos(sunAngle) * 2.0); sunDirection.normalize(); // scene/demo-specific uniforms if (cameraControlsObject.position.y < waterLevel) cameraUnderWater = 1.0; else cameraUnderWater = 0.0; pathTracingUniforms.uCameraUnderWater.value = cameraUnderWater; pathTracingUniforms.uWaterLevel.value = waterLevel; pathTracingUniforms.uSunDirection.value.copy(sunDirection); // INFO cameraInfoElement.innerHTML = "FOV: " + worldCamera.fov + " / Aperture: " + apertureSize.toFixed(2) + " / FocusDistance: " + focusDistance + "
" + "Samples: " + sampleCounter; } // end function updateUniforms() init(); // init app and start animating