Initiation à la programmation 3D avec Three.js Dans une animation 3D, nous avons la possibilité non seulement de déplacer des objets sur la scène, mais également de déplacer des sources de lumière et une caméra pour modifier le point de vue. Nous utiliserons un maillage ou Mesh pour créer les objets et les formes. Pour cela nous utiliserons des matières Materials dont nous pouvons choisir les propriétés telles que la couleur, l’opacité, la réflectivité. Il est également possible d’ajouter une texture en plaquant une image sur la surface de l’objet. Nous allons utiliser la libraire open source JavaScript Three.js qui fonctionne dans tous les navigateurs sans addition de plugin et qui simplifie la programmation 3D. Vous en trouverez ici la version 69 : http://isnangellier.alwaysdata.net/three.min.js, de nombreux exemples de réalisation ainsi qu’une documentation complète sur le site http://threejs.org/ I. La scène et l’objet Créer la page html. Shapes In Scene
La première chose à faire est de mettre en place la scène puis de placer la caméra. L’objet scène est créé en utilisant : scene=new THREE.Scene(). Les dimensions de la fenêtre d’affichage sont choisies égales aux dimensions de l’écran. On laisse Three.js créer le DOM et on utilise WebGLRenderer pour restituer la scène et gérer le rendu. Créer le script3D.js ci-dessous qui constitue le squelette de base. function init() { function render() { requestAnimationFrame(render);//fait une boucle sur render renderer.render(scene,camera);//pour visualiser la scène avec la caméra } scene=new THREE.Scene();//cet objet scène va contenir tous les objets renderer=new THREE.WebGLRenderer();//cet objet va permettre le rendu de la scène renderer.setClearColor("black",1.0); renderer.setSize(window.innerWidth,window.innerHeight); renderer.shadowMapEnabled=true; camera = new THREE.PerspectiveCamera(45,window.innerWidth/window.innerHeight,0.1,1000);//cela d»termine ce que l'on va voir

camera.position.x=15; camera.position.y=16; camera.position.z=13; camera.lookAt(scene.position); document.body.appendChild(renderer.domElement); render(); } window.onload=init;//une fois la page chargée, initialise Nous allons maintenant placer un cube sur la scène ainsi qu’un spot lumineux pour l’éclairer. Pour cela on donne les caractéristiques de sa géométrie et on précise la matière qui le constitue. On précise la position du spot lumineux et on l’ajoute à la scène. Placer ce code juste avant render(). var cubeGeometry=new THREE.BoxGeometry(6,4,6);//largeur, hauteur et profondeur du cube var cubeMaterial=new THREE.MeshLambertMaterial({//définition de la matière pour savoir comment l'objet réagira sous l'éclairage color: "yellow" }); var cube=new THREE.Mesh(cubeGeometry,cubeMaterial);//on combine les deux informations précédentes scene.add(cube); var spotLight=new THREE.SpotLight("white"); spotLight.position.set(10,20,-20);//détermine la position du spot lumineux spotLight.castShadow=true; scene.add(spotLight); On peut vérifier qu’un cube rouge éclairé par de la lumière bleue apparaît noir, et qu’un cube jaune éclairé par de la lumière verte apparaît vert… L’absence de précision sur la position du cube le place à l’origine (0,0,0). On peut ajouter une sphère sur la scène en précisant sa position, celle-ci est repérée dans le système d’axes représenté ci-dessous :

var sphereGeometry = new THREE.SphereGeometry( 2, 32, 32 ); var sphereMaterial = new THREE.MeshLambertMaterial( {color: "blue"} ); var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); sphere.position.x=-10; sphere.position.z=-6; scene.add(sphere);

Ainsi qu’un plan positionné de façon à ce que le cube de hauteur 4, centré en O, repose sur ce plan : var geometry = new THREE.PlaneBufferGeometry( 5, 20, 32 ); var material = new THREE.MeshLambertMaterial( {color: "red"} ); var plane = new THREE.Mesh( geometry, material ); plane.position.y=-2; scene.add( plane ); Puis faire tourner le plan de -90° pour qu’il devienne horizontal : plane.rotation.x=-0.5*Math.PI; II. Exemple d’application Nous effaçons les objets précédents pour créer une nouvelle sphère : var sphereGeometry = new THREE.SphereGeometry( 5, 32, 32 ); var sphereMaterial = new THREE.MeshNormalMaterial( {color: "blue"} ); var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial); sphere.position.x=0; sphere.position.z=0; scene.add(sphere); Nous ajoutons dans le fichier html un lien vers la librairie OrbitControls.js que l’on trouvera ici : http://isnangellier.alwaysdata.net/OrbitControls.js Dans script3D.js, on ajoute : cameraControl = new THREE.OrbitControls(camera); control = new function () { this.rotationSpeed = 0.005; this.opacity = 0.6; }; et on ajoute dans la fonction render() : cameraControl.update(); Grâce à ces lignes de code, on peut déplacer la sphère avec les touches directionnelles du clavier et on peut la faire tourner et redimensionner avec la souris. Nous allons maintenant mettre une texture de planisphère sur la sphère. Nous avons besoin de l’image : http://isnangellier.alwaysdata.net/earthmap.jpg Nous changeons également la matière de la sphère. var sphereGeometry = new THREE.SphereGeometry( 5, 32, 32 ); var earthTexture = new THREE.ImageUtils.loadTexture('earthmap.jpg'); var sphereMaterial = new THREE.MeshBasicMaterial(); sphereMaterial.map=earthTexture; var Earth = new THREE.Mesh(sphereGeometry, sphereMaterial); scene.add(Earth);

Nous allons également ajouter des nuages à la surface de la terre : http://isnangellier.alwaysdata.net/earthcloudmap.jpg var cloudsGeometry= new THREE.SphereGeometry(0.51, 32, 32 ); var cloudsTexture = new THREE.ImageUtils.loadTexture('earthcloudmap.jpg'); var sphereMaterial = new THREE.MeshBasicMaterial({ map : cloudsTexture, side : THREE.DoubleSide, opacity : 0.35, transparent : true, depthWrite : false, } ); var Clouds = new THREE.Mesh(sphereGeometry, sphereMaterial); On peut lier les nuages à la Terre Earth.add(Clouds); On peut faire tourner la Terre et les nuages autour de l’axe des y en ajoutant dans le render() Earth.rotation.y +=0.002; On se propose maintenant de représenter la Terre éclairée par le Soleil de façon plus réaliste. On sera amené à utiliser le même matériau qu’au début MeshLambertMaterial pour diffuser la lumière envoyée par une DirectionalLight (une source infiniment lointaine comme le Soleil, voir la documentation). On fera tourner la Terre autour d’un axe incliné de 23° par rapport à l’axe des y en utilisant : rotateOnAxis(axis,rad) après avoir défini var axis = new THREE.Vector3(0,0.92,-0.39);

On est très loin de ce résultat http://planetmaker.wthr.us/ mais il faut bien un début!

TP n°11 - Initiation à la programmation 3D.pdf

la position du spot lumineux et on l'ajoute à la scène. Placer ce code juste avant render(). var cubeGeometry=new THREE.BoxGeometry(6,4,6);//largeur, hauteur ...

481KB Sizes 13 Downloads 48 Views

Recommend Documents

TP n°11 - Initiation à la programmation 3D.pdf
Whoops! There was a problem loading this page. Retrying... TP n°11 - Initiation à la programmation 3D.pdf. TP n°11 - Initiation à la programmation 3D.pdf. Open.

www.espace-etudiant.net - TP la cellule vegetale.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item.

TP n°23 La découverte du neutrino.pdf
TP n°23 La découverte du neutrino.pdf. TP n°23 La découverte du neutrino.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying TP n°23 La ...

Programmation 2016-2017 - version finale.pdf
Lieu à préciser. Geneviève Boucher (Université d'Ottawa), « Regards croisés sur une ville en révolution : les tableaux parisiens de la Première République ».

Initiation Into Hermetics
By auto-suggestion c. ... By breathing through the lungs & pores in the whole body b. In different parts of the ... Step IV ~ Magic Mental Training ...... write or paint.

Programmation hiver 2017.pdf
Page 1 of 2. PROGRAMMATION. HIVER 2017. Le plan d'intervention : Conférence présentée par Lorraine Doucet,. spécialiste en inclusion scolaire. 18 mars 9h00 à 16h00. Mamans seulement: 31 janvier, 28 février et 21 mars 18h30 à 21h30. Papas seule

Programmation Stages et Compétitions.pdf
Page 1 of 1. A AFFICHER. PROGRAMMATION STAGES REGIONAUX ET COMPETITIONS SAISON 2016/2017. STAGES REGIONAUX ET NATIONAUX.

the masonic initiation
of keen search for guidance upon the dark path of human life ; and let me here say that as warm, and almost as many, .... cut stages ; since before anyone can pass from his natural darkness to the Light supernal and discover the Blazing Star or Glory

TP-1.pdf
Whoops! There was a problem loading more pages. Whoops! There was a problem previewing this document. Retrying... Download. Connect more apps.

tp-stp.pdf
Exécuter un ping d'une machine vers une autre dans le réseau. – Passez en mode .... Partie 2 : test de la redondance dans un réseau commuté .... tp-stp.pdf. tp-stp.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying tp-stp.pdf.

TP 8 - Correction.pdf
... was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. TP 8 - Correction.pdf.

LIOC Initiation report-LC.pdf
As at 30th June 2015. VOTING. Indian Oil Corporation Limited 75.1%. BOC - Ceybank Unit Trust 2.0%. Trading Partners 2.0%. HSBC Wasatch Frontier Fund 1.5 ...

TP potty party.pdf
There was a problem previewing this document. Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. TP potty party.

tp murder case.pdf
"\q]o Ir†alWr aÂ¥\lPo IlSr hu\r Sr. I. cPsgo aui ̃Zo gl^r "ü„ hrPrŒo. I. grÂ¥\lPo I.hr. claNæ„ Ñmh† aÂ¥\lPo t^sJo dG_u ‹Zs]o. Ps-e-]-cp- G. hr.]r.AG. Â¥\Xl|jS|G 11 ...

7- TP- ACL.pdf
utilisant les ACLs étendues nommées. Page 3 of 4. 7- TP- ACL.pdf. 7- TP- ACL.pdf. Open. Extract. Open with. Sign In. Main menu. Displaying 7- TP- ACL.pdf.

Ancient and Modern Initiation
Catholic churches is magnetized by the priest during the ceremony of consecration, so also the water ...... The church steeple is very broad at the bottom, but gradually it narrows more and more until at the top it is just a ..... The Immaculate Conc