diff --git a/ALVARIZA-BILLAR_DESERT_KANY/index.html b/ALVARIZA-BILLAR_DESERT_KANY/index.html
index 76e27dc119783f47da855d49712c43bab0798e9a..993035b56f18e6334d0f2aad8faed83ead8dad22 100644
--- a/ALVARIZA-BILLAR_DESERT_KANY/index.html
+++ b/ALVARIZA-BILLAR_DESERT_KANY/index.html
@@ -1 +1,43 @@
-Le travail n'a pas encore commencé!!!
\ No newline at end of file
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>projet</title>
+    <style>
+        body {
+            margin: 0;
+        }
+
+        canvas {
+            width: 100%;
+            height: 100%
+        }
+
+        .centre {
+            text-align: center;
+        }
+    </style>
+</head>
+<body>
+<!-- API importe du site de Three.js -->
+<script async src="https://unpkg.com/es-module-shims@1.3.6/dist/es-module-shims
+.js"></script>
+<script type="importmap">
+    {
+    "imports": {
+    "three": "https://threejs.org/build/three.module.js",
+    "three/addons/": "https://threejs.org/examples/jsm/"
+    }
+    }
+</script>
+<!-- JQuery pour afficher les erreurs -->
+<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js
+"></script>
+<!-- Un titre centre -->
+<h1 class="centre"> projet</h1>
+<div id="webGL" class="centre"></div>
+<!-- Mon script avec un chemin relatif -->
+<script type="module" src="projet.js"></script>
+<p class="centre"> projet </p>
+</body>
+</html>
\ No newline at end of file
diff --git a/ALVARIZA-BILLAR_DESERT_KANY/projet.js b/ALVARIZA-BILLAR_DESERT_KANY/projet.js
new file mode 100644
index 0000000000000000000000000000000000000000..57da68cabee9ba9cea532f67658828039a052b98
--- /dev/null
+++ b/ALVARIZA-BILLAR_DESERT_KANY/projet.js
@@ -0,0 +1,327 @@
+"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
+////////////////////////////////////////////////////////////////////////////////
+/*global THREE, $ */
+
+import * as THREE from 'three';
+
+import {OBJLoader} from 'three/addons/loaders/OBJLoader.js';
+import {OrbitControls} from 'three/addons/controls/OrbitControls.js';
+import {dat} from '../webgl25/lib/dat.gui.min.js';
+import {Coordinates} from '../webgl25/lib/Coordinates.js';
+
+window.scene = new THREE.Scene();
+
+var camera, renderer;
+var cameraControls;
+var bevelRadius = 1.9;
+var clock = new THREE.Clock();
+var cylinder,sphere,cube;
+
+function fillScene() {
+	scene = new THREE.Scene();
+	scene.fog = new THREE.Fog( 0xAAAAAA, 3000, 5000 );
+
+	// LIGHTS
+	scene.add( new THREE.AmbientLight( 0x222222 ) );
+	var light = new THREE.DirectionalLight( 0xFFFFFF, 0.7 );
+	light.position.set( 200, 500, 500 );
+	scene.add( light );
+	light = new THREE.DirectionalLight( 0xFFFFFF, 0.9 );
+	light.position.set( -200, -100, -400 );
+	scene.add( light );
+
+	// GROUND
+	// Student: texture is located at URL textures/grass512x512.jpg
+	var solidGround = new THREE.Mesh(
+		new THREE.PlaneGeometry( 10000, 10000, 100, 100 ),
+		new THREE.MeshLambertMaterial( { color: 0xFFFFFF } ) );
+	solidGround.rotation.x = - Math.PI / 2;
+
+	scene.add( solidGround );
+
+	// uncomment to see grid on ground
+	/*
+	// put grid lines every 10000/100 = 100 units
+	var ground = new THREE.Mesh(
+		new THREE.PlaneGeometry( 10000, 10000, 100, 100 ),
+		new THREE.MeshBasicMaterial( { color: 0x0, wireframe: true } ) );
+	ground.rotation.x = - Math.PI / 2;
+	// cheat: offset by a small amount so grid is on top
+	ground.position.y = 0.2;
+	scene.add( ground );
+	*/
+
+	// Bird
+	var bird = new THREE.Object3D();
+	createDrinkingBird( bird );
+	scene.add( bird );
+
+}
+
+function createSupport( bsupport ) {
+	var legMaterial = new THREE.MeshPhongMaterial( { shininess: 4 } );
+	legMaterial.color.setHex( 0xAdA79b );
+	legMaterial.specular.setRGB( 0.5, 0.5, 0.5 );
+
+	var footMaterial = new THREE.MeshPhongMaterial( { color: 0x960f0b, shininess: 30 } );
+	footMaterial.specular.setRGB( 0.5, 0.5, 0.5 );
+
+	// base
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 20+64+110, 4, 2*77+12  ), footMaterial );
+	cube.position.x = -45;	// (20+32) - half of width (20+64+110)/2
+	cube.position.y = 4/2;	// half of height
+	cube.position.z = 0;	// centered at origin
+	bsupport.add( cube );
+
+	// feet
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 20+64+110, 52, 6  ), footMaterial );
+	cube.position.x = -45;	// (20+32) - half of width (20+64+110)/2
+	cube.position.y = 52/2;	// half of height
+	cube.position.z = 77 + 6/2;	// offset 77 + half of depth 6/2
+	bsupport.add( cube );
+
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 20+64+110, 52, 6  ), footMaterial );
+	cube.position.x = -45;	// (20+32) - half of width (20+64+110)/2
+	cube.position.y = 52/2;	// half of height
+	cube.position.z = -(77 + 6/2);	// negative offset 77 + half of depth 6/2
+	bsupport.add( cube );
+
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 64, 104, 6  ), footMaterial );
+	cube.position.x = 0;	// centered on origin along X
+	cube.position.y = 104/2;
+	cube.position.z = 77 + 6/2;	// negative offset 77 + half of depth 6/2
+	bsupport.add( cube );
+
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 64, 104, 6  ), footMaterial );
+	cube.position.x = 0;	// centered on origin along X
+	cube.position.y = 104/2;
+	cube.position.z = -(77 + 6/2);	// negative offset 77 + half of depth 6/2
+	bsupport.add( cube );
+
+	// legs
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 60, 282+4, 4  ), legMaterial );
+	cube.position.x = 0;	// centered on origin along X
+	cube.position.y = 104 + 282/2 - 2;
+	cube.position.z = 77 + 6/2;	// negative offset 77 + half of depth 6/2
+	bsupport.add( cube );
+
+	cube = new THREE.Mesh(
+		new THREE.BoxGeometry( 60, 282+4, 4  ), legMaterial );
+	cube.position.x = 0;	// centered on origin along X
+	cube.position.y = 104 + 282/2 - 2;
+	cube.position.z = -(77 + 6/2);	// negative offset 77 + half of depth 6/2
+	bsupport.add( cube );
+}
+
+// Body of the bird - body and the connector of body and head
+function createBody(bbody) {
+	var bodyMaterial = new THREE.MeshPhongMaterial( { shininess: 100 } );
+	bodyMaterial.color.setRGB( 31/255, 86/255, 169/255 );
+	bodyMaterial.specular.setRGB( 0.5, 0.5, 0.5 );
+
+	var glassMaterial = new THREE.MeshPhongMaterial( { color: 0x0, specular: 0xFFFFFF, shininess: 100, opacity: 0.3, transparent: true } );
+
+	var crossbarMaterial = new THREE.MeshPhongMaterial( { color: 0x808080, specular: 0xFFFFFF, shininess: 400 } );
+
+	// body
+	sphere = new THREE.Mesh(
+		new THREE.SphereGeometry( 104/2, 32, 16, 0, Math.PI * 2, Math.PI/2, Math.PI ), bodyMaterial );
+	sphere.position.x = 0;
+	sphere.position.y = 160;
+	sphere.position.z = 0;
+	bbody.add( sphere );
+
+	// cap for top of hemisphere
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 104/2, 104/2, 0, 32 ), bodyMaterial );
+	cylinder.position.x = 0;
+	cylinder.position.y = 160;
+	cylinder.position.z = 0;
+	bbody.add( cylinder );
+
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 12/2, 12/2, 390 - 100, 32 ), bodyMaterial );
+	cylinder.position.x = 0;
+	cylinder.position.y = 160 + 390/2 - 100;
+	cylinder.position.z = 0;
+	bbody.add( cylinder );
+
+	// glass stem
+	sphere = new THREE.Mesh(
+		new THREE.SphereGeometry( 116/2, 32, 16 ), glassMaterial );
+	sphere.position.x = 0;
+	sphere.position.y = 160;
+	sphere.position.z = 0;
+	bbody.add( sphere );
+
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 24/2, 24/2, 390, 32 ), glassMaterial );
+	cylinder.position.x = 0;
+	cylinder.position.y = 160 + 390/2;
+	cylinder.position.z = 0;
+	bbody.add( cylinder );
+
+	// crossbar
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 5, 5, 200, 32 ), crossbarMaterial );
+	cylinder.position.set( 0, 360, 0 );
+	cylinder.rotation.x = 90 * Math.PI / 180.0;
+	bbody.add( cylinder );
+}
+
+// Head of the bird - head + hat
+function createHead(bhead) {
+	var headMaterial = new THREE.MeshLambertMaterial( );
+	headMaterial.color.r = 104/255;
+	headMaterial.color.g = 1/255;
+	headMaterial.color.b = 5/255;
+
+	var hatMaterial = new THREE.MeshPhongMaterial( { shininess: 100 } );
+	hatMaterial.color.r = 24/255;
+	hatMaterial.color.g = 38/255;
+	hatMaterial.color.b = 77/255;
+	hatMaterial.specular.setRGB( 0.5, 0.5, 0.5 );
+
+	var eyeMaterial = new THREE.MeshPhongMaterial( { color: 0x000000, specular: 0x303030, shininess: 4 } );
+
+	// head
+	sphere = new THREE.Mesh(
+		new THREE.SphereGeometry( 104/2, 32, 16 ), headMaterial );
+	sphere.position.x = 0;
+	sphere.position.y = 160 + 390;
+	sphere.position.z = 0;
+	bhead.add( sphere );
+
+	// hat
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 142/2, 142/2, 10, 32 ), hatMaterial );
+	cylinder.position.x = 0;
+	cylinder.position.y = 160 + 390 + 40 + 10/2;
+	cylinder.position.z = 0;
+	bhead.add( cylinder );
+
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 80/2, 80/2, 70, 32 ), hatMaterial );
+	cylinder.position.x = 0;
+	cylinder.position.y = 160 + 390 + 40 + 10 + 70/2;
+	cylinder.position.z = 0;
+	bhead.add( cylinder );
+
+	// nose
+	cylinder = new THREE.Mesh(
+		new THREE.CylinderGeometry( 6, 14, 70, 32 ), headMaterial );
+	cylinder.position.set( -70, 530, 0 );
+	cylinder.rotation.z = 90 * Math.PI / 180.0;
+	bhead.add( cylinder );
+
+	// eyes
+	var sphGeom = new THREE.SphereGeometry( 10, 32, 16 );
+
+	// left eye
+	sphere = new THREE.Mesh( sphGeom, eyeMaterial );
+	sphere.position.set( -48, 560, 0 );
+	var eye = new THREE.Object3D();
+	eye.add( sphere );
+	eye.rotation.y = 20 * Math.PI / 180.0;
+	bhead.add( eye );
+
+	// right eye
+	sphere = new THREE.Mesh( sphGeom, eyeMaterial );
+	sphere.position.set( -48, 560, 0 );
+	eye = new THREE.Object3D();
+	eye.add( sphere );
+	eye.rotation.y = -20 * Math.PI / 180.0;
+	bhead.add( eye );
+}
+
+function createDrinkingBird(bbird) {
+	var support = new THREE.Object3D();
+	var body = new THREE.Object3D();
+	var head = new THREE.Object3D();
+
+	// MODELS
+	// base + legs + feet
+	createSupport(support);
+
+	// body + body/head connector
+	createBody(body);
+
+	// head + hat
+	createHead(head);
+
+	// make moving piece
+
+	var bodyhead = new THREE.Object3D();
+	bodyhead.add(body);
+	bodyhead.add(head);
+
+	bbird.add(support);
+	bbird.add(bodyhead);
+}
+
+function init() {
+	var canvasWidth = 846;
+	var canvasHeight = 494;
+	// For grading the window is fixed in size; here's general code:
+	//var canvasWidth = window.innerWidth;
+	//var canvasHeight = window.innerHeight;
+	var canvasRatio = canvasWidth / canvasHeight;
+
+	// RENDERER
+	renderer = new THREE.WebGLRenderer( { antialias: true } );
+	renderer.gammaInput = true;
+	renderer.gammaOutput = true;
+	renderer.setSize(canvasWidth, canvasHeight);
+	renderer.setClearColor( 0xAAAAAA, 1.0 );
+
+	var container = document.getElementById( 'webGL');
+	container.appendChild( renderer.domElement );
+
+	// CAMERA
+	camera = new THREE.PerspectiveCamera( 35, canvasRatio, 1, 8000 );
+	camera.position.set( -1230, 920, -670 );
+
+	// CONTROLS
+	cameraControls = new THREE.OrbitControls(camera, renderer.domElement);
+	cameraControls.target.set(0,270,0);
+
+}
+
+function addToDOM() {
+	var container = document.getElementById( 'webGL');
+	var canvas = container.getElementsByTagName('canvas');
+	if (canvas.length>0) {
+		container.removeChild(canvas[0]);
+	}
+	container.appendChild( renderer.domElement );
+}
+
+function animate() {
+	window.requestAnimationFrame(animate);
+	render();
+}
+
+function render() {
+	var delta = clock.getDelta();
+	cameraControls.update(delta);
+
+	renderer.render(scene, camera);
+}
+
+try {
+	init();
+	fillScene();
+	addToDOM();
+	animate();
+} catch(e) {
+	var errorReport = "Your program encountered an unrecoverable error, can not draw on canvas. Error was:<br/><br/>";
+	$('#webGL').append(errorReport+e);
+}
\ No newline at end of file