From f05d536cb4522fb0e3af780bd7328ed09c42021a Mon Sep 17 00:00:00 2001
From: Sefer Algul <algul.sefer@univ-lorraine.fr>
Date: Wed, 19 Feb 2025 11:39:07 +0100
Subject: [PATCH] ajout brouillard

---
 ALGUL/checklistProjet.md |  4 ++--
 ALGUL/index.js           | 24 ++++++------------------
 2 files changed, 8 insertions(+), 20 deletions(-)

diff --git a/ALGUL/checklistProjet.md b/ALGUL/checklistProjet.md
index e464c85..820896c 100644
--- a/ALGUL/checklistProjet.md
+++ b/ALGUL/checklistProjet.md
@@ -6,9 +6,9 @@
 - [X] Couleur
 - [ ] Transparence
 - [ ] Eclairage
-- [ ] Ombres portées
+- [X] Ombres portées
 - [] Position de la caméra
-- [ ] Brouillard
+- [X] Brouillard
 - [ ] Effet miroir
 - [X] Texture classique
 - [ ] Texture avec transparence
diff --git a/ALGUL/index.js b/ALGUL/index.js
index 8f1558a..22d78e9 100644
--- a/ALGUL/index.js
+++ b/ALGUL/index.js
@@ -2,11 +2,13 @@ import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.150.1/build/three.m
 import { OrbitControls } from 'https://cdn.jsdelivr.net/npm/three@0.150.1/examples/jsm/controls/OrbitControls.js';
 import { GLTFLoader } from 'https://cdn.jsdelivr.net/npm/three@0.150.1/examples/jsm/loaders/GLTFLoader.js';
 import { OBJLoader } from 'https://cdn.jsdelivr.net/npm/three@0.150.1/examples/jsm/loaders/OBJLoader.js';
+import { Water } from 'https://cdn.jsdelivr.net/npm/three@0.150.1/examples/jsm/objects/Water.js';
 import * as dat from 'https://cdn.jsdelivr.net/npm/dat.gui@0.7.9/build/dat.gui.module.js';
 
 // SCENE
 const scene = new THREE.Scene();
 scene.background = new THREE.Color(0x87CEEB);
+scene.fog = new THREE.FogExp2(0xCCC8C4); 
 
 // CAMERA
 const camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 5000);
@@ -14,7 +16,7 @@ camera.position.set(380, 200, 30);
 
 // RENDERER
 const renderer = new THREE.WebGLRenderer({ antialias: true });
-renderer.shadowMap.enabled = true;               // Active les ombres
+renderer.shadowMap.enabled = true;               
 renderer.shadowMap.type = THREE.PCFSoftShadowMap;
 renderer.setSize(window.innerWidth, window.innerHeight);
 document.body.appendChild(renderer.domElement);
@@ -46,10 +48,9 @@ const sun = new THREE.Mesh(sunGeometry, sunMaterial);
 sun.position.set(-700, 800, -1000);
 scene.add(sun);
 
-// DirectionalLight pour le soleil (avec ombres)
 const sunLight = new THREE.DirectionalLight(0xffddaa, 3);
 sunLight.position.set(500, 1000, -1000);
-sunLight.castShadow = true;                      // Indispensable pour projeter des ombres
+sunLight.castShadow = true;                      
 sunLight.shadow.mapSize.width = 2048;
 sunLight.shadow.mapSize.height = 2048;
 sunLight.shadow.camera.near = 1;
@@ -60,14 +61,11 @@ sunLight.shadow.camera.top = 1000;
 sunLight.shadow.camera.bottom = -1000;
 scene.add(sunLight);
 
-// CHARGEMENT DES PONTS
 const loader = new GLTFLoader();
 
-// 1er pont
 loader.load('modeles/old_bridge.glb', function (gltf) {
     const bridge = gltf.scene;
 
-    // Activer les ombres
     bridge.traverse((node) => {
         if (node.isMesh) {
             node.castShadow = true;
@@ -86,7 +84,6 @@ loader.load('modeles/old_bridge.glb', function (gltf) {
     console.error("Erreur de chargement du pont :", error);
 });
 
-// 2e pont
 loader.load('modeles/old_bridge.glb', function (gltf) {
     const bridge2 = gltf.scene;
     bridge2.traverse((node) => {
@@ -107,7 +104,6 @@ loader.load('modeles/old_bridge.glb', function (gltf) {
     console.error("Erreur de chargement du pont :", error);
 });
 
-// 3e pont
 loader.load('modeles/old_bridge.glb', function (gltf) {
     const bridge3 = gltf.scene;
     bridge3.traverse((node) => {
@@ -128,7 +124,6 @@ loader.load('modeles/old_bridge.glb', function (gltf) {
     console.error("Erreur de chargement du pont :", error);
 });
 
-// 4e pont
 loader.load('modeles/old_bridge.glb', function (gltf) {
     const bridge4 = gltf.scene;
     bridge4.traverse((node) => {
@@ -149,7 +144,6 @@ loader.load('modeles/old_bridge.glb', function (gltf) {
     console.error("Erreur de chargement du pont :", error);
 });
 
-// CHARGEMENT DES BATEAUX
 loader.load('modeles/bateau.glb', function (gltf) {
     const boat1 = gltf.scene.clone();
     boat1.traverse((node) => {
@@ -180,7 +174,6 @@ loader.load('modeles/bateau.glb', function (gltf) {
     console.error("Erreur de chargement des bateaux :", error);
 });
 
-// SOL (eau)
 const textureLoader = new THREE.TextureLoader();
 const groundTexture = textureLoader.load('textures/water2.jpg');
 groundTexture.wrapS = groundTexture.wrapT = THREE.RepeatWrapping;
@@ -194,11 +187,10 @@ const solidGround = new THREE.Mesh(
 );
 solidGround.rotation.x = -Math.PI / 2;
 solidGround.position.y = -2;
-// Reçoit les ombres
+
 solidGround.receiveShadow = true;
 scene.add(solidGround);
 
-// MODÈLE SCREAM
 const objLoader = new OBJLoader();
 objLoader.load('modeles/scream/Scream 3D-bl.obj', function (obj) {
     const screamTexture = textureLoader.load('modeles/scream/Scream Texture.png');
@@ -221,7 +213,6 @@ objLoader.load('modeles/scream/Scream 3D-bl.obj', function (obj) {
     console.error("Erreur de chargement du modèle Scream :", error);
 });
 
-// SPHEREBOX (Ciel panoramique)
 const skyTexture = textureLoader.load('textures/skybox2.png');
 const skyMaterial = new THREE.MeshBasicMaterial({
     map: skyTexture,
@@ -235,7 +226,6 @@ skySphere.rotation.x = Math.PI / 2;
 skySphere.rotation.z = Math.PI / -1;
 scene.add(skySphere);
 
-// SPRITES
 const spriteTexture = textureLoader.load('textures/sprite.png');
 const spriteMaterial = new THREE.SpriteMaterial({ map: spriteTexture });
 const sprite = new THREE.Sprite(spriteMaterial);
@@ -250,14 +240,13 @@ sprite2.position.set(20, 160, 0);
 sprite2.scale.set(50, 100, 50);
 scene.add(sprite2);
 
-// GUI
 const gui = new dat.GUI();
 gui.add(camera, 'fov', 10, 100).name('Zoom').onChange(() => {
     camera.updateProjectionMatrix();
 });
 gui.add(sunLight, 'intensity', 0, 10).name('Soleil Intensité');
+gui.add(scene.fog, 'density', 0, 0.0015).name('Brouillard');
 
-// ANIMATION
 function animate() {
     requestAnimationFrame(animate);
     controls.update();
@@ -265,7 +254,6 @@ function animate() {
 }
 animate();
 
-// REDIMENSIONNEMENT
 window.addEventListener('resize', () => {
     renderer.setSize(window.innerWidth, window.innerHeight);
     camera.aspect = window.innerWidth / window.innerHeight;
-- 
GitLab