diff --git a/DUFOUR/chambre.js b/DUFOUR/chambre.js index 72205860ec44c6568adf0ec60771a74c3c3d6cc2..c7c3cb8818b5a0e696e46636f3de4da8901685e5 100644 --- a/DUFOUR/chambre.js +++ b/DUFOUR/chambre.js @@ -1,13 +1,16 @@ -"use strict";import * as THREE from 'three'; +"use strict"; +import * as THREE from 'three'; import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; +import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'; import { Coordinates } from './lib/Coordinates.js'; + var camera, renderer; var windowScale; window.scene = new THREE.Scene(); var cameraControls; var clock = new THREE.Clock(); -var transparentCube; // Objet autour duquel la caméra tournera +var transparentCube; function fillScene() { scene = new THREE.Scene(); @@ -34,20 +37,102 @@ function fillScene() { var cubeGeometry = new THREE.BoxGeometry(100, 100, 100); transparentCube = new THREE.Mesh(cubeGeometry, transparentMaterial); - transparentCube.position.set(0, 50, 0); // Position du cube + transparentCube.position.set(0, 50, 0); scene.add(transparentCube); + // Sol + var solTexture = new THREE.TextureLoader().load('sol_boiserie.jpg'); + solTexture.wrapS = THREE.RepeatWrapping; + solTexture.wrapT = THREE.RepeatWrapping; + solTexture.repeat.set(4, 4); + var solMaterial = new THREE.MeshBasicMaterial({ map: solTexture }); + var sol = new THREE.Mesh(new THREE.PlaneGeometry(1000, 1000), solMaterial); + sol.rotation.x = -Math.PI / 2; + sol.position.y = 0; + scene.add(sol); + // Ajout du lit - - var bed = new THREE.TextureLoader().load('lit.png'); - var bedMaterial = new THREE.MeshBasicMaterial({ map: bed }); - var bedSizeLength = 400, bedSizeHeight = 200, bedSizeWidth = 200; - var bedGeometry = new THREE.BoxGeometry(bedSizeLength, bedSizeHeight, bedSizeWidth); - bed = new THREE.Mesh(bedGeometry, bedMaterial); - - //bed = new THREE.Mesh(bedGeometry); + var bedTexture = new THREE.TextureLoader().load('lit.png'); + var bedMaterial = new THREE.MeshBasicMaterial({ map: bedTexture }); + var bedGeometry = new THREE.BoxGeometry(400, 20, 200); + var bed = new THREE.Mesh(bedGeometry, bedMaterial); bed.position.set(200, 100, 425); - window.scene.add(bed); + scene.add(bed); + + + + + // Chaise + var chaiseTexture = new THREE.TextureLoader().load('chaise.jpg'); + var chaiseMaterial = new THREE.MeshBasicMaterial({ map: chaiseTexture }); + var seat = new THREE.Mesh(new THREE.BoxGeometry(100, 10, 100), chaiseMaterial); + seat.position.set(-300, 50, 0); + var backrest = new THREE.Mesh(new THREE.BoxGeometry(100, 150, 10), chaiseMaterial); + backrest.position.set(-300, 125, -45); + scene.add(seat, backrest); + + // Table + var tableTexture = new THREE.TextureLoader().load('table_bois.jpg'); + var tableMaterial = new THREE.MeshBasicMaterial({ map: tableTexture }); + var table = new THREE.Mesh(new THREE.BoxGeometry(300, 150, 200), tableMaterial); + table.position.set(-100, 75, 200); + scene.add(table); + + // Tableau sur le mur + var paintingTexture = new THREE.TextureLoader().load('tableau_van_gogh.jpg'); + var paintingMaterial = new THREE.MeshBasicMaterial({ map: paintingTexture }); + var painting = new THREE.Mesh(new THREE.PlaneGeometry(120, 90), paintingMaterial); + painting.position.set(250, 350, -499); + scene.add(painting); + + // Portes + var porteTexture = new THREE.TextureLoader().load('porte.jpg'); + var porteMaterial = new THREE.MeshBasicMaterial({ map: porteTexture }); + + var porte1 = new THREE.Mesh(new THREE.PlaneGeometry(150, 250), porteMaterial); + porte1.position.set(-100,125, 490); + scene.add(porte1); + + var porte2 = new THREE.Mesh(new THREE.PlaneGeometry(150, 250), porteMaterial); + porte2.position.set(-125, 125, -499); + scene.add(porte2); + porte1.renderOrder = 1; // Assure que la porte est rendue après le mur + + + // Murs + var murTexture = new THREE.TextureLoader().load('mur_bleu.jpg'); + var murMaterial = new THREE.MeshBasicMaterial({ map: murTexture }); + + var backmur = new THREE.Mesh(new THREE.PlaneGeometry(1000, 600), murMaterial); + backmur.position.set(0, 300, -500); + scene.add(backmur); + + var leftmur = new THREE.Mesh(new THREE.PlaneGeometry(1000, 600), murMaterial); + leftmur.rotation.y = Math.PI / 2; + leftmur.position.set(-500, 300, 0); + scene.add(leftmur); + + var rightmur = new THREE.Mesh(new THREE.PlaneGeometry(1000, 600), murMaterial); + rightmur.rotation.y = -Math.PI / 2; + rightmur.position.set(500, 300, 0); + scene.add(rightmur); + + var frontmur = new THREE.Mesh(new THREE.PlaneGeometry(1000, 600), murMaterial); + frontmur.rotation.y = Math.PI; + frontmur.position.set(0, 300, 500); + scene.add(frontmur); +} +function loadModel() { + const loader = new GLTFLoader(); + + loader.load('wooden_bed.glb', function (gltf) { + const model = gltf.scene; + model.scale.set(1, 1, 1); // Ajuste l'échelle si nécessaire + model.position.set(0, 0, 0); // Ajuste la position du modèle + scene.add(model); // Ajoute le modèle à la scène + }, undefined, function (error) { + console.error('Erreur de chargement du modèle:', error); + }); } function init() { @@ -67,9 +152,9 @@ function init() { camera.position.set(-500, 125, -100); camera.lookAt(new THREE.Vector3(0, 0, 0)); - // CONTROLS (L'utilisateur peut tourner la caméra) + // CONTROLS cameraControls = new OrbitControls(camera, renderer.domElement); - cameraControls.enableDamping = true; // Ajoute un effet d'inertie + cameraControls.enableDamping = true; cameraControls.dampingFactor = 0.05; cameraControls.rotateSpeed = 1.0; } @@ -90,17 +175,16 @@ function animate() { function render() { var delta = clock.getDelta(); - cameraControls.update(); // Mise à jour des contrôles de la caméra + cameraControls.update(); renderer.render(window.scene, camera); } -// Lancement du programme try { init(); fillScene(); + loadModel(); animate(); addToDOM(); } catch (e) { - var errorReport = "Your program encountered an unrecoverable error, cannot draw on canvas. Error was:<br/><br/>"; - $('#webGL').append(errorReport + e); + console.error("Erreur lors du rendu:", e); } \ No newline at end of file