Skip to content
Snippets Groups Projects
Commit f89750a1 authored by MattheoCo's avatar MattheoCo
Browse files

mise en place de la salle

parent 50535cd6
No related branches found
No related tags found
No related merge requests found
...@@ -4,43 +4,222 @@ import { OBJLoader } from 'three/addons/loaders/OBJLoader.js'; ...@@ -4,43 +4,222 @@ import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';
// Initialisation de la scène, de la caméra et du rendu // Initialisation de la scène, de la caméra et du rendu
const scene = new THREE.Scene(); const scene = new THREE.Scene();
const renderer = new THREE.WebGLRenderer(); const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight); renderer.setSize(window.innerWidth, window.innerHeight);
document.getElementById('webGL').appendChild(renderer.domElement); document.getElementById('webGL').appendChild(renderer.domElement);
// Define shared materials
const woodMaterial = new THREE.MeshStandardMaterial({ color: 0x8B4513 });
const wallMaterial = new THREE.MeshStandardMaterial({ color: 0xE8E8E8 });
const floorMaterial = new THREE.MeshStandardMaterial({ color: 0x808080 });
const ceilingMaterial = new THREE.MeshStandardMaterial({ color: 0xF5F5F5 });
let camera; let camera;
// Ajout des contrôles de la caméra // Ajout des contrôles de la caméra
let controls; let controls;
function init() { function init() {
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 20); camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 100);
camera.position.z = 1.5; // Rapprochez la caméra camera.position.set(0, 2, 5); // Position the camera to see the room
// scene // scene
const ambientLight = new THREE.AmbientLight(0xffffff); const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(ambientLight); scene.add(ambientLight);
const pointLight = new THREE.PointLight(0xffffff, 1); const pointLight = new THREE.PointLight(0xffffff, 1);
camera.add(pointLight); pointLight.position.set(0, 3, 0); // Light from ceiling
scene.add(pointLight);
scene.add(camera); scene.add(camera);
// renderer // renderer
renderer.setPixelRatio(window.devicePixelRatio); renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
renderer.setSize(window.innerWidth, window.innerHeight); renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setAnimationLoop(animate); renderer.setAnimationLoop(animate);
// controls // controls
controls = new OrbitControls(camera, renderer.domElement); controls = new OrbitControls(camera, renderer.domElement);
controls.minDistance = 1; controls.minDistance = 1;
controls.maxDistance = 3; controls.maxDistance = 10;
controls.enableDamping = true;
controls.dampingFactor = 0.05;
// resize event // resize event
window.addEventListener('resize', onWindowResize); window.addEventListener('resize', onWindowResize);
// Create the room
createRoom();
// Create the table
createTable();
// Load the violin object with textures // Load the violin object with textures
ObjectWithTextures(); ObjectWithTextures();
} }
function createRoom() {
// Load the stone texture
const textureLoader = new THREE.TextureLoader();
const stoneTexture = textureLoader.load('textures/ft_stone01_n.png');
// Define shared materials - update floor to be white and ceiling to be light gray
const woodMaterial = new THREE.MeshStandardMaterial({ color: 0x8B4513 });
const floorMaterial = new THREE.MeshStandardMaterial({ color: 0xFFFFFF }); // White floor
const ceilingMaterial = new THREE.MeshStandardMaterial({ color: 0xF5F5F5 });
// Apply texture to the wall material with lighter gray color
const wallMaterial = new THREE.MeshStandardMaterial({
color: 0xBBBBBB, // Lighter gray color (changed from 0x808080)
normalMap: stoneTexture,
normalScale: new THREE.Vector2(0.5, 0.5),
roughness: 0.7,
metalness: 0.2
});
// Floor
const floorGeometry = new THREE.PlaneGeometry(10, 10);
const floor = new THREE.Mesh(floorGeometry, floorMaterial);
floor.rotation.x = -Math.PI / 2;
floor.position.y = -1;
scene.add(floor);
// Ceiling
const ceilingGeometry = new THREE.PlaneGeometry(10, 10);
const ceiling = new THREE.Mesh(ceilingGeometry, ceilingMaterial);
ceiling.rotation.x = Math.PI / 2;
ceiling.position.y = 4;
scene.add(ceiling);
// Wall 1 (back)
const wall1Geometry = new THREE.PlaneGeometry(10, 5);
const wall1 = new THREE.Mesh(wall1Geometry, wallMaterial);
wall1.position.set(0, 1.5, -5);
scene.add(wall1);
// Wall 2 (right) - with window
// Instead of a full wall, create wall segments around the window
// Top segment of wall 2
const wall2TopGeometry = new THREE.PlaneGeometry(10, 1);
const wall2Top = new THREE.Mesh(wall2TopGeometry, wallMaterial);
wall2Top.position.set(5, 3.5, 0);
wall2Top.rotation.y = -Math.PI / 2;
scene.add(wall2Top);
// Bottom segment of wall 2
const wall2BottomGeometry = new THREE.PlaneGeometry(10, 2); // Increased height from 1 to 2
const wall2Bottom = new THREE.Mesh(wall2BottomGeometry, wallMaterial);
wall2Bottom.position.set(5, 0, 0); // Lowered position from y: 0.5 to y: 0
wall2Bottom.rotation.y = -Math.PI / 2;
scene.add(wall2Bottom);
// Left segment of wall 2
const wall2LeftGeometry = new THREE.PlaneGeometry(10 - 3, 2);
const wall2Left = new THREE.Mesh(wall2LeftGeometry, wallMaterial);
wall2Left.position.set(5, 2, -3.5 - 1.5);
wall2Left.rotation.y = -Math.PI / 2;
scene.add(wall2Left);
// Right segment of wall 2
const wall2RightGeometry = new THREE.PlaneGeometry(10 - 3, 2);
const wall2Right = new THREE.Mesh(wall2RightGeometry, wallMaterial);
wall2Right.position.set(5, 2, 3.5 + 1.5);
wall2Right.rotation.y = -Math.PI / 2;
scene.add(wall2Right);
// Window pane
const windowGeometry = new THREE.PlaneGeometry(3, 2);
const windowMaterial = new THREE.MeshStandardMaterial({
color: 0x87CEEB,
transparent: true,
opacity: 0.7
});
const windowMesh = new THREE.Mesh(windowGeometry, windowMaterial);
windowMesh.position.set(5.05, 2, 0);
windowMesh.rotation.y = -Math.PI / 2;
scene.add(windowMesh);
// Window frame - Fix orientation issue
const frameTop = new THREE.Mesh(
new THREE.BoxGeometry(0.1, 0.1, 3.2), // Fixed orientation (width, height, depth)
woodMaterial
);
frameTop.position.set(5.05, 3.05, 0);
scene.add(frameTop);
const frameBottom = new THREE.Mesh(
new THREE.BoxGeometry(0.1, 0.1, 3.2), // Fixed orientation (width, height, depth)
woodMaterial
);
frameBottom.position.set(5.05, 0.95, 0);
scene.add(frameBottom);
const frameLeft = new THREE.Mesh(
new THREE.BoxGeometry(0.1, 2.2, 0.1),
woodMaterial
);
frameLeft.position.set(5.05, 2, -1.55);
scene.add(frameLeft);
const frameRight = new THREE.Mesh(
new THREE.BoxGeometry(0.1, 2.2, 0.1),
woodMaterial
);
frameRight.position.set(5.05, 2, 1.55);
scene.add(frameRight);
// Wall 3 (front) - with door
const wall3Geometry = new THREE.PlaneGeometry(10, 5);
const wall3 = new THREE.Mesh(wall3Geometry, wallMaterial);
wall3.position.set(0, 1.5, 5);
wall3.rotation.y = Math.PI;
scene.add(wall3);
// Door hole (cut in wall3)
const doorGeometry = new THREE.BoxGeometry(2, 3, 0.3);
const door = new THREE.Mesh(doorGeometry, woodMaterial);
door.position.set(2, 0.5, 4.9);
scene.add(door);
// Wall 4 (left)
const wall4Geometry = new THREE.PlaneGeometry(10, 5);
const wall4 = new THREE.Mesh(wall4Geometry, wallMaterial);
wall4.position.set(-5, 1.5, 0);
wall4.rotation.y = Math.PI / 2;
scene.add(wall4);
}
function createTable() {
// Table top
const tableTopGeometry = new THREE.BoxGeometry(3, 0.1, 2);
const tableTop = new THREE.Mesh(tableTopGeometry, woodMaterial);
tableTop.position.set(0, 0, 0);
scene.add(tableTop);
// Table legs geometry (shared)
const legGeometry = new THREE.BoxGeometry(0.1, 1, 0.1);
// Leg 1 (front left)
const leg1 = new THREE.Mesh(legGeometry, woodMaterial);
leg1.position.set(-1.4, -0.5, 0.9);
scene.add(leg1);
// Leg 2 (front right)
const leg2 = new THREE.Mesh(legGeometry, woodMaterial);
leg2.position.set(1.4, -0.5, 0.9);
scene.add(leg2);
// Leg 3 (back left)
const leg3 = new THREE.Mesh(legGeometry, woodMaterial);
leg3.position.set(-1.4, -0.5, -0.9);
scene.add(leg3);
// Leg 4 (back right)
const leg4 = new THREE.Mesh(legGeometry, woodMaterial);
leg4.position.set(1.4, -0.5, -0.9);
scene.add(leg4);
}
// Fonction pour charger l'objet avec des textures // Fonction pour charger l'objet avec des textures
function ObjectWithTextures() { function ObjectWithTextures() {
const textureLoader = new THREE.TextureLoader(); const textureLoader = new THREE.TextureLoader();
...@@ -58,15 +237,15 @@ function ObjectWithTextures() { ...@@ -58,15 +237,15 @@ function ObjectWithTextures() {
child.material.needsUpdate = true; child.material.needsUpdate = true;
} }
}); });
object.position.set(0, 0, -1); // Position the object in front of the camera object.position.set(0, 0.15, 0); // Raised position slightly to avoid clipping with table
object.scale.setScalar(0.05); // Augmentez l'échelle de l'objet object.rotation.x = Math.PI / 2; // Lay the violin flat on the table
object.scale.setScalar(0.1); // Doubled the scale from 0.05 to 0.1
scene.add(object); scene.add(object);
}); });
} }
// Fonction d'animation // Fonction d'animation
function animate() { function animate() {
requestAnimationFrame(animate);
controls.update(); controls.update();
renderer.render(scene, camera); renderer.render(scene, camera);
} }
...@@ -77,5 +256,4 @@ function onWindowResize() { ...@@ -77,5 +256,4 @@ function onWindowResize() {
renderer.setSize(window.innerWidth, window.innerHeight); renderer.setSize(window.innerWidth, window.innerHeight);
} }
init(); init();
animate(); \ No newline at end of file
\ No newline at end of file
COGNET/textures/ft_stone01_n.png

125 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment