Compare commits

...

2 Commits

Author SHA1 Message Date
6079d802f2 loading progress circle 2023-06-28 17:37:52 +02:00
bff47a6bbe material tweaks 2023-06-28 15:25:11 +02:00
3 changed files with 43 additions and 13 deletions

View File

@ -143,7 +143,7 @@
</head>
<body>
<div id="container"></div>
<span id="message" class="loading"></span>
<span id="message" class="loading"><div id="progressCircle" data-progress="0" style="--progress: 0deg;"></div></span>
<script type="module" src="main.js"></script>

28
main.js
View File

@ -1,4 +1,3 @@
import * as THREE from 'three';
import { Octree } from 'three/addons/math/Octree.js';
@ -36,10 +35,13 @@ piano.loop = false
const loadMngr = new THREE.LoadingManager();
const loader = new THREE.TextureLoader(loadMngr);
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) {
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) {
message.innerHTML = 'Erreur de chargement'
@ -66,6 +68,7 @@ renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.physicallyCorrectLights = true;
renderer.outputEncoding = THREE.sRGBEncoding;
container.appendChild(renderer.domElement);
@ -81,8 +84,10 @@ scene.background = new THREE.CubeTextureLoader()
'rt.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);
camera.rotation.order = 'YXZ';
@ -94,10 +99,12 @@ const collisionner = new THREE.Group();
const wallMaterial = new THREE.MeshStandardMaterial({
map : loader.load('textures/stonewall/albedo.png'),
normalMap : loader.load('textures/stonewall/normal.png'),
normalScale : new THREE.Vector2(0.6, 0.6),
metalnessMap: loader.load('textures/stonewall/metalness.png'),
aoMap : loader.load('textures/stonewall/ao.png'),
roughnessMap: loader.load('textures/stonewall/roughness.png'),
envMap : scene.background
roughness : 1,
envMapIntensity: 0.1
})
const maze = new MazeMesh(mazeWidth, mazeWidth, 1, wallMaterial);
@ -158,7 +165,6 @@ const groundMaterial = new THREE.MeshStandardMaterial({
texture.repeat.set(mazeWidth / 4, mazeWidth / 4)
}
),
envMap: scene.background
})
const sideGroundMaterial = groundMaterial.clone()
sideGroundMaterial.map = wallMaterial.map.clone()
@ -259,10 +265,10 @@ scene.add(ocean);
const sun = new THREE.Vector3();
const ambientLight = new THREE.AmbientLight(0x404040, 7);
scene.add(ambientLight);
//const ambientLight = new THREE.AmbientLight(0x404040, 7);
//scene.add(ambientLight);
const sunLight = new THREE.DirectionalLight(0xfffae8, 0.5);
const sunLight = new THREE.DirectionalLight(0xfffae8, 2);
sunLight.castShadow = true;
sunLight.shadow.camera.near = 0.1;
sunLight.shadow.camera.far = 1.4 * mazeWidth;
@ -289,7 +295,7 @@ function updateSun() {
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,
raftFaceMaterial,
raftSideMaterial,
raftSideMaterial,
raftFaceMaterial,
raftFaceMaterial,
])
raft.position.set( .2, ocean.position.y, -mazeWidth/2 - 1 );

View File

@ -40,7 +40,31 @@ body {
#message.loading {
display: flex;
top: 30vh;
font-size: 4vh;
}
#message.loading div {
display: flex;
width: 200px;
height: 200px;
border-radius: 50%;
background: conic-gradient(#1da8b7 var(--progress), dimgray 0deg);
font-size: 0;
}
#message.loading div::after {
content: attr(data-progress) '%';
display: flex;
justify-content: center;
flex-direction: column;
width: 100%;
margin: 4px;
border-radius: 50%;
color: white;
background: black;
font-size: 3vh;
font-weight: 400;
font-family: system-ui;
text-align: center;
}
#message a {