|
|
@@ -1,4 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
import * as THREE from 'three';
|
|
|
|
import * as THREE from 'three';
|
|
|
|
|
|
|
|
|
|
|
|
import { Octree } from 'three/addons/math/Octree.js';
|
|
|
|
import { Octree } from 'three/addons/math/Octree.js';
|
|
|
@@ -36,10 +35,13 @@ piano.loop = false
|
|
|
|
const loadMngr = new THREE.LoadingManager();
|
|
|
|
const loadMngr = new THREE.LoadingManager();
|
|
|
|
const loader = new THREE.TextureLoader(loadMngr);
|
|
|
|
const loader = new THREE.TextureLoader(loadMngr);
|
|
|
|
loadMngr.onStart = function (url, itemsLoaded, itemsTotal) {
|
|
|
|
loadMngr.onStart = function (url, itemsLoaded, itemsTotal) {
|
|
|
|
message.innerHTML = 'Chargement : 0%...'
|
|
|
|
progressCircle.setAttribute("data-progress", 0)
|
|
|
|
|
|
|
|
progressCircle.style.setProperty("--progress", "0deg")
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
loadMngr.onProgress = function (url, itemsLoaded, itemsTotal) {
|
|
|
|
loadMngr.onProgress = function (url, itemsLoaded, itemsTotal) {
|
|
|
|
message.innerHTML = 'Chargement : ' + Math.floor(100 * itemsLoaded / itemsTotal) + '%...'
|
|
|
|
progressCircle.setAttribute("data-progress", Math.floor(100 * itemsLoaded / itemsTotal))
|
|
|
|
|
|
|
|
progressCircle.style.setProperty("--progress", Math.floor(360 * itemsLoaded / itemsTotal)+"deg")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
loadMngr.onError = function (url) {
|
|
|
|
loadMngr.onError = function (url) {
|
|
|
|
message.innerHTML = 'Erreur de chargement'
|
|
|
|
message.innerHTML = 'Erreur de chargement'
|
|
|
@@ -66,6 +68,7 @@ renderer.toneMapping = THREE.ACESFilmicToneMapping;
|
|
|
|
renderer.shadowMap.enabled = true;
|
|
|
|
renderer.shadowMap.enabled = true;
|
|
|
|
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
|
|
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
|
|
renderer.physicallyCorrectLights = true;
|
|
|
|
renderer.physicallyCorrectLights = true;
|
|
|
|
|
|
|
|
renderer.outputEncoding = THREE.sRGBEncoding;
|
|
|
|
|
|
|
|
|
|
|
|
container.appendChild(renderer.domElement);
|
|
|
|
container.appendChild(renderer.domElement);
|
|
|
|
|
|
|
|
|
|
|
@@ -81,8 +84,10 @@ scene.background = new THREE.CubeTextureLoader()
|
|
|
|
'rt.jpg',
|
|
|
|
'rt.jpg',
|
|
|
|
'lf.jpg',
|
|
|
|
'lf.jpg',
|
|
|
|
] );
|
|
|
|
] );
|
|
|
|
|
|
|
|
scene.backgroundBlurriness = 0.03;
|
|
|
|
|
|
|
|
scene.environment = scene.background;
|
|
|
|
|
|
|
|
|
|
|
|
window.scene = scene
|
|
|
|
window.scene = scene;
|
|
|
|
|
|
|
|
|
|
|
|
const camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1, 1000);
|
|
|
|
const camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.1, 1000);
|
|
|
|
camera.rotation.order = 'YXZ';
|
|
|
|
camera.rotation.order = 'YXZ';
|
|
|
@@ -94,10 +99,12 @@ const collisionner = new THREE.Group();
|
|
|
|
const wallMaterial = new THREE.MeshStandardMaterial({
|
|
|
|
const wallMaterial = new THREE.MeshStandardMaterial({
|
|
|
|
map : loader.load('textures/stonewall/albedo.png'),
|
|
|
|
map : loader.load('textures/stonewall/albedo.png'),
|
|
|
|
normalMap : loader.load('textures/stonewall/normal.png'),
|
|
|
|
normalMap : loader.load('textures/stonewall/normal.png'),
|
|
|
|
|
|
|
|
normalScale : new THREE.Vector2(0.6, 0.6),
|
|
|
|
metalnessMap: loader.load('textures/stonewall/metalness.png'),
|
|
|
|
metalnessMap: loader.load('textures/stonewall/metalness.png'),
|
|
|
|
aoMap : loader.load('textures/stonewall/ao.png'),
|
|
|
|
aoMap : loader.load('textures/stonewall/ao.png'),
|
|
|
|
roughnessMap: loader.load('textures/stonewall/roughness.png'),
|
|
|
|
roughnessMap: loader.load('textures/stonewall/roughness.png'),
|
|
|
|
envMap : scene.background
|
|
|
|
roughness : 1,
|
|
|
|
|
|
|
|
envMapIntensity: 0.1
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
const maze = new MazeMesh(mazeWidth, mazeWidth, 1, wallMaterial);
|
|
|
|
const maze = new MazeMesh(mazeWidth, mazeWidth, 1, wallMaterial);
|
|
|
@@ -158,7 +165,6 @@ const groundMaterial = new THREE.MeshStandardMaterial({
|
|
|
|
texture.repeat.set(mazeWidth / 4, mazeWidth / 4)
|
|
|
|
texture.repeat.set(mazeWidth / 4, mazeWidth / 4)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
),
|
|
|
|
),
|
|
|
|
envMap: scene.background
|
|
|
|
|
|
|
|
})
|
|
|
|
})
|
|
|
|
const sideGroundMaterial = groundMaterial.clone()
|
|
|
|
const sideGroundMaterial = groundMaterial.clone()
|
|
|
|
sideGroundMaterial.map = wallMaterial.map.clone()
|
|
|
|
sideGroundMaterial.map = wallMaterial.map.clone()
|
|
|
@@ -259,10 +265,10 @@ scene.add(ocean);
|
|
|
|
|
|
|
|
|
|
|
|
const sun = new THREE.Vector3();
|
|
|
|
const sun = new THREE.Vector3();
|
|
|
|
|
|
|
|
|
|
|
|
const ambientLight = new THREE.AmbientLight(0x404040, 7);
|
|
|
|
//const ambientLight = new THREE.AmbientLight(0x404040, 7);
|
|
|
|
scene.add(ambientLight);
|
|
|
|
//scene.add(ambientLight);
|
|
|
|
|
|
|
|
|
|
|
|
const sunLight = new THREE.DirectionalLight(0xfffae8, 0.5);
|
|
|
|
const sunLight = new THREE.DirectionalLight(0xfffae8, 2);
|
|
|
|
sunLight.castShadow = true;
|
|
|
|
sunLight.castShadow = true;
|
|
|
|
sunLight.shadow.camera.near = 0.1;
|
|
|
|
sunLight.shadow.camera.near = 0.1;
|
|
|
|
sunLight.shadow.camera.far = 1.4 * mazeWidth;
|
|
|
|
sunLight.shadow.camera.far = 1.4 * mazeWidth;
|
|
|
@@ -289,7 +295,7 @@ function updateSun() {
|
|
|
|
|
|
|
|
|
|
|
|
sunLight.position.copy(sun)
|
|
|
|
sunLight.position.copy(sun)
|
|
|
|
|
|
|
|
|
|
|
|
ambientLight.intensity = 5 + 5 * Math.sin(Math.max(THREE.MathUtils.degToRad(parameters.elevation), 0));
|
|
|
|
//ambientLight.intensity = 5 + 5 * Math.sin(Math.max(THREE.MathUtils.degToRad(parameters.elevation), 0));
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@@ -332,7 +338,7 @@ const raft = new THREE.Mesh(raftGeometry, [
|
|
|
|
raftSideMaterial,
|
|
|
|
raftSideMaterial,
|
|
|
|
raftFaceMaterial,
|
|
|
|
raftFaceMaterial,
|
|
|
|
raftSideMaterial,
|
|
|
|
raftSideMaterial,
|
|
|
|
raftSideMaterial,
|
|
|
|
raftFaceMaterial,
|
|
|
|
raftFaceMaterial,
|
|
|
|
raftFaceMaterial,
|
|
|
|
])
|
|
|
|
])
|
|
|
|
raft.position.set( .2, ocean.position.y, -mazeWidth/2 - 1 );
|
|
|
|
raft.position.set( .2, ocean.position.y, -mazeWidth/2 - 1 );
|
|
|
|