From 3c9fd899bb0a3d3cefc879ea0d7d8747ce838468 Mon Sep 17 00:00:00 2001
From: deser <romain.desert6@etu.univ-lorraine.fr>
Date: Mon, 10 Mar 2025 20:15:30 +0100
Subject: [PATCH] clarification code + modification dalle beton

---
 ALVARIZA-BILLAR_DESERT_KANY/projet.js | 113 ++++++++++++++++----------
 1 file changed, 70 insertions(+), 43 deletions(-)

diff --git a/ALVARIZA-BILLAR_DESERT_KANY/projet.js b/ALVARIZA-BILLAR_DESERT_KANY/projet.js
index dd30715..6518737 100644
--- a/ALVARIZA-BILLAR_DESERT_KANY/projet.js
+++ b/ALVARIZA-BILLAR_DESERT_KANY/projet.js
@@ -1,23 +1,31 @@
 "use strict"; // good practice - see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
 ////////////////////////////////////////////////////////////////////////////////
-// Add a grassy plain underneath the drinking bird
+// Reproduction du tableau Gas de Edward Hopper en 3D
 ////////////////////////////////////////////////////////////////////////////////
 /*global THREE, $ */
 import * as THREE from 'three';
 
-import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';
-import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
+import {OBJLoader} from 'three/addons/loaders/OBJLoader.js';
+import {OrbitControls} from 'three/addons/controls/OrbitControls.js';
 import * as dat from 'https://cdn.jsdelivr.net/npm/dat.gui@0.7.9/build/dat.gui.module.js';
-import { MTLLoader } from 'three/addons/loaders/MTLLoader.js';
+import {MTLLoader} from 'three/addons/loaders/MTLLoader.js';
 
 window.scene = new THREE.Scene();
 
+// Variables globales
 var camera, renderer;
 var cameraControls;
 var bevelRadius = 1.9;
 var clock = new THREE.Clock();
 var cylinder, sphere, cube;
 
+
+var beton;
+
+// var controls = {
+//     rotationY: Math.PI / 1      // valeur par défaut
+// }
+
 function fillScene() {
     scene = new THREE.Scene();
 
@@ -32,7 +40,7 @@ function fillScene() {
 
     // GROUND
     var texture = new THREE.TextureLoader();
-    var grassTexture = texture.load('textures/grass.png'); // Assurez-vous que la texture d'herbe est dans le dossier textures
+    var grassTexture = texture.load('textures/grass.png');
 
     grassTexture.wrapS = THREE.RepeatWrapping;
     grassTexture.wrapT = THREE.RepeatWrapping;
@@ -40,7 +48,7 @@ function fillScene() {
 
     var solidGround = new THREE.Mesh(
         new THREE.PlaneGeometry(100000, 100000, 1000, 1000),
-        new THREE.MeshLambertMaterial({ map: grassTexture })
+        new THREE.MeshLambertMaterial({map: grassTexture})
     );
     solidGround.rotation.x = -Math.PI / 2;
 
@@ -58,27 +66,35 @@ function fillScene() {
 
     var road = new THREE.Mesh(
         new THREE.PlaneGeometry(2000, 20000),
-        new THREE.MeshLambertMaterial({ map: roadTexture })
+        new THREE.MeshLambertMaterial({map: roadTexture})
     );
     road.rotation.x = -Math.PI / 2;
     road.position.y = 20;
-	road.position.z = 20;
+    road.position.z = 20;
 
     scene.add(road);
 
 
-	//Ajout du carré de beton pour la station essence 
+    // Ajouter une dalle de béton
+    var betonTexture = texture.load('textures/beton.jpg');
+    betonTexture.wrapS = THREE.RepeatWrapping;
+    betonTexture.wrapT = THREE.RepeatWrapping;
+    betonTexture.repeat.set(1, 1);
 
-	var betonTexture = texture.load('textures/beton.jpg');
-    var beton = new THREE.Mesh(
-        new THREE.PlaneGeometry(5000, 5000),
-        new THREE.MeshLambertMaterial({ map: betonTexture })
+    var betonMaterial = new THREE.MeshLambertMaterial({map: betonTexture});
+
+    beton = new THREE.Mesh(
+        new THREE.BoxGeometry(5000, 350, 5000),
+        betonMaterial
     );
-    beton.rotation.x = -Math.PI / 2;
-	beton.position.set(-4000, 20, 0); // Positionner le carré de béton plus à droite
+    beton.position.set(-5000, 0, 2000);
+    beton.rotation.y = 0.46;
+
 
     scene.add(beton);
 
+
+    // Ajouter les arbres
     new MTLLoader()
         .load('tree_bonus.mtl', function (materials) {
             materials.preload();
@@ -87,32 +103,32 @@ function fillScene() {
                 .setMaterials(materials)
                 .load('tree_bonus.obj', function (object) {
                     // Colorer l'arbre en vert sapin et enlever le reflet blanc
-					object.traverse(function (child) {
-						if (child.isMesh) {
-							child.material = new THREE.MeshLambertMaterial({ color: 0x228B22 }); // Vert sapin
-						}
-					});
-
-					// Créer un rectangle de sapins à gauche de la route
-					var numTreesX = 20; // Nombre de sapins sur l'axe X
-					var numTreesZ = 100; // Nombre de sapins sur l'axe Z
-					var spacingX = 2000; // Espacement entre les sapins sur l'axe X
-					var spacingZ = 1000; // Espacement entre les sapins sur l'axe Z
-					var startX = 5000; // Position de départ sur l'axe X
-					var startZ = -50000; // Position de départ sur l'axe Z
-					 // Position de départ sur l'axe Z pour déplacer les arbres plus au sud
-					for (var x = 0; x < numTreesX; x++) {
-						for (var z = 0; z < numTreesZ; z++) {
-							var tree = object.clone();
-							tree.position.set(
-								startX + x * spacingX,
-								0,
-								startZ + z * spacingZ
-							);
-							tree.scale.setScalar(400);
-							scene.add(tree);
-						}
-					}
+                    object.traverse(function (child) {
+                        if (child.isMesh) {
+                            child.material = new THREE.MeshLambertMaterial({color: 0x228B22}); // Vert sapin
+                        }
+                    });
+
+                    // Créer un rectangle de sapins à gauche de la route
+                    var numTreesX = 20; // Nombre de sapins sur l'axe X
+                    var numTreesZ = 100; // Nombre de sapins sur l'axe Z
+                    var spacingX = 2000; // Espacement entre les sapins sur l'axe X
+                    var spacingZ = 1000; // Espacement entre les sapins sur l'axe Z
+                    var startX = 3000; // Position de départ sur l'axe X
+                    var startZ = -50000; // Position de départ sur l'axe Z
+                    // Position de départ sur l'axe Z pour déplacer les arbres plus au sud
+                    for (var x = 0; x < numTreesX; x++) {
+                        for (var z = 0; z < numTreesZ; z++) {
+                            var tree = object.clone();
+                            tree.position.set(
+                                startX + x * spacingX,
+                                0,
+                                startZ + z * spacingZ
+                            );
+                            tree.scale.setScalar(400);
+                            scene.add(tree);
+                        }
+                    }
 
                     // Créer plusieurs cercles de sapins
                     var numCircles = 10; // Nombre de cercles
@@ -136,7 +152,8 @@ function fillScene() {
                     }
                 });
         });
-}
+    }
+
 
 function init() {
     var canvasWidth = 846;
@@ -144,7 +161,7 @@ function init() {
     var canvasRatio = canvasWidth / canvasHeight;
 
     // RENDERER
-    renderer = new THREE.WebGLRenderer({ antialias: true });
+    renderer = new THREE.WebGLRenderer({antialias: true});
     renderer.gammaInput = true;
     renderer.gammaOutput = true;
     renderer.setSize(canvasWidth, canvasHeight);
@@ -160,6 +177,16 @@ function init() {
     // CONTROLS
     cameraControls = new OrbitControls(camera, renderer.domElement);
     cameraControls.target.set(0, 270, 0);
+
+    // GUI
+    var gui = new dat.GUI();
+
+    // Slider pour la rotation de la dalle de béton
+    // gui.add(controls, 'rotationY', 0, Math.PI * 2).step(0.01).name('Rotation Y').onChange(function (value) {
+    //     if (beton) {
+    //         beton.rotation.y = value;
+    //     }
+    // });
 }
 
 function addToDOM() {
-- 
GitLab