Un ghid al lui Noob la trei.js

Complexitatea Web-ului se schimbă zilnic, iar posibilitățile sale cresc la fel de repede; în special cu redarea 3D. WebGL (Web Graphics Library) este un API JavaScript pentru redarea graficelor interactive 3D și 2D. Three.js de Ricardo Cabello este o bibliotecă construită pe partea de sus a WebGL, asigurând că codul autorizat este compatibil între diferite browsere. 

Trei.js este pentru WebGL ce jQuery este JavaScript, oferind sintaxa declarativa iubita de atat de multi si abstractizarea durerilor de cap pentru 3D in browser. Să o revedem, să obținem o prezentare generală a sintaxei și să vedem cum să începeți dacă sunteți nou în jocul 3D.

Ce căutăm spre lucruri

Aruncați o privire la următoarea demonstrație pe CodePen; utilizați cursorul mouse-ului pentru a glisa modelul în jurul acestuia, pentru a mări și a deplasa cu roata mouse-ului.

1. Setarea scenei

Vom lucra în CodePen din motive de ușurință; începeți prin conectarea la Three.js (CDN 126Kb) din fila JS.

Începem prin a crea o scenă, la fel cum începeți cu o pânză în Photoshop. O scenă este definită cu o variabilă înainte ca orice alt cod să fie scris. Deci, în panoul JS adăugați:

var scena = nouă TREI ();

aparat foto!

Cu perdelele și pregătite pentru performanța noastră, vom avea nevoie de o modalitate de a vedea timpul nostru minunat de a introduce o cameră. Există o serie de camere pe care Three.js le include împreună, cum ar fi PerspectiveCamera, StereoCamera, OrthographicCamera și CubeCamera. În scopurile noastre vom folosi PerspectiveCamera deoarece este proiectat să imite modul în care ochiul uman vede. Așa cum definim o scenă cu o variabilă, facem același lucru pentru a defini o cameră:

camera var = nouă Trial.PerspectiveCamera ();

PerspectiveCamera acceptă patru argumente: FOV, aspect, lângă și departe

  • FOV (câmpul vizual) este cât de mult puteți vedea în jurul centrului camerei. Gândiți-vă la un obiectiv cu unghi larg de pe o cameră foto față de o lentilă standard. 
  • aspect este raportul dintre FOV, sau cu alte cuvinte, lățimea până la înălțimea unui ecran (de exemplu, 4: 5, 16: 9). 
  • Ultimele două, lângă și departe, sunt avioanele unui solid. Împreună, ele controlează dacă un obiect este redat pe baza distanței acestuia față de cameră. lângă este cel mai apropiat un obiect sau o parte a unui obiect poate fi la aparatul foto în timp ce este încă redat, departe este cel mai departe un obiect poate fi de la aparatul de fotografiat și încă să fie prestate. Împreună acestea definesc frustumul vizual al camerei.
Vizualizarea frustumului

Iată un exemplu de PerspectiveCamera argumente:

var camera = noua camera de pariuri THREE.Perspective (75, window.innerWidth / window.innerHeight, 0.1, 1000);

Nu este important să înțelegeți fiecare valoare în acest moment decât să cunoaștem valorile pe care le avem poate sa fi trecut. Continuând, va trebui să setăm poziția camerei.

camera.position.set (x, y, z);

Această linie este poziția locală a obiectului. Aceasta stabilește X, y și z coordonatele vectorului. Fără ea camera nu va vedea nimic.

2. WebGLRenderer

Următorul ingredient important din rețeta noastră este crearea unui WebGLRenderer. Aceasta este piesa care este responsabilă pentru magia afișării creației voastre.

var renderer = nou THREE.WebGLRenderer ();

WebGLRenderer poate accepta și proprietățile și valorile transmise ca obiect.

var renderer = nou THREE.WebGLRenderer (alpha: true // elimina panza 'bg color);

Sunt destul de puține Valoarea proprietății perechi care pot fi folosite - ele sunt enumerate în docs ar trebui să vă decideți să se arunce mai adânc într-un punct mai târziu (ceva ce am încuraja foarte mult).

Cu randul definit putem stabili metode de personalizare a creației noastre, cum ar fi setSize; o metodă pe care o veți folosi în aproape fiecare proiect Three.js.

// Efectuați redarea scenei dimensiunea ecranului renderer.setSize (window.innerWidth, window.innerHeight);

Există multe alte metode pe care le puteți utiliza, dar pentru scopurile noastre vom rămâne setSize ()

3. DOM

Acum că dimensiunea dorită este definită, vom avea nevoie de o modalitate de ao atașa DOM.

document.body.appendChild (renderer.domElement);

Acest DOMElement proprietatea este locul în care redacția redă producția și va fi sub formă de a pânză element. Deși eu folosesc document.body ați putea adăuga sau prefixa pânză element oriunde doriți. Depinde de dvs. unde vă doriți plasarea pe baza nevoilor specifice ale proiectului dvs..

Crearea unui obiect

Pentru următorul pas trebuie să creați un obiect - deoarece tot ceea ce am făcut până acum este să declare o scenă, o cameră și un renderer. Pentru scopuri demonstrative, să luăm un telefon mobil de la 3D Warehouse astfel încât să putem construi un previewer de produs pentru persoanele care achiziționează un iPhone online.

iPhone 6+ de Jeremie P

De obicei, puteți utiliza aplicații precum SketchUp sau chiar Blender pentru a desena obiectele 3D, cu toate acestea există o curbă de învățare înaltă pentru aplicațiile de desen 3D - o curbă care este cu siguranță în afara domeniului de aplicare al acestui articol.

Dacă Îți place Piña Collada

Pentru a insera obiectul 3D pe scena, trebuie sa utilizam ColladaLoader. Trebuie menționat că orice grafic pe care decideți să-l utilizați ar trebui în general să fie sub 1-2Mb și trebuie să fie un fișier Collada pentru a fi utilizat cu Three.js: acestea sunt fișiere care se termină cu .dae extensie. Dacă deschideți un fișier Collada, veți vedea că este scris de fapt în XML.

Începem prin definirea ColladaLoader folosind o variabilă și apelarea metodei împreună cu definirea unei alte variabile care să reprezinte graficul 3D pentru referire la un punct ulterior.

var dae, // încărcător grafic = nou THREE.ColladaLoader (); // încărcător

Acesta este un început minunat, dar trebuie să facem ceva mai mult de făcut pentru a afișa telefonul. Să facem o funcție care va face exact așa:

funcția loadCollada (collada) dae = collada.scene; scene.add (dae); 

Pentru următorul pas vom folosi sarcină , treceți adresa URL a fișierului nostru Collada și apoi apelați funcția noastră după nume ca al doilea argument:

loader.load ('http://myurl.com/file/iphone6.dae', loadCollada);

Dacă doriți să aflați mai multe despre ColladaLoader puteți săpe prin codul sursă pe GitHub.

4. Bucle de rulare

Cu încărcătorul și graficul în final, există un ultim pas; trebuie să creăm ceea ce se numește o "buclă de randare". Acest lucru se datorează faptului că nu mai dăm nimic încă.

Această "buclă de render" este ceea ce va determina redarea să deseneze scena de șaizeci de ori pe secundă. Următoarea funcție va face din creația noastră viu (cea mai bună parte a întregului proces).

funcția renderPhone () requestAnimationFrame (renderPhone); renderer.render (scenă, cameră);  renderPhone ();

requestAnimationFrame are o serie de avantaje. Cel mai important este că acesta se oprește când utilizatorul navighează către o altă filă de browser, în cele din urmă nu irosind puterea de procesare și durata de viață a bateriei.

Produs final

Rezultatul acestei lucrări este o redare dulce a unui iPhone 3D pe care îl puteți roti, roti și măriți și plasa din:

Există încă câțiva biți care au intrat în creația finală, așa că vă încurajez să vă aruncați mai adânc în panoul JavaScript al demo-ului.

De exemplu; Iluminat (Lumină ambientală, HemisphereLight, PointLight), TrackballControlsAxisHelper și un eveniment de redimensionare a ferestrelor. Unele dintre aceste elemente nu conțin documentație, cum ar fi TrackballControls, dar puteți găsi toate proprietățile disponibile în fișierul JS de bază pe GitHub. Există și alte controale foarte reale pe care le puteți utiliza, care sunt, de asemenea, listate pe GitHub.

Inspirație

Uneori aveți nevoie de puțină inspirație pentru a obține creierul să ardă idei într-un ritm rapid. Următoarele sunt câteva dintre demosurile mele preferate, folosind Trei.js care transformă visele în realitate. 

https://paperplanes.worldhttps://throughthedark.withgoogle.com (apucați-vă căștile)http://carvisualizer.plus360degrees.com/threejs

Citirea în continuare

Rachel Smith a scris un articol extraordinar despre CodePen despre WebGL și recomand să-i citești când ai timp liber. Tutorialul este plin de limbaj simplu si este o explicatie minutioasa a lui Three.js despre scena, geometria, iluminarea, materialele si animatia pe care cu siguranta nu le-am putut acoperi in acest scurt post.

De asemenea, vă puteți bucura:

  • WebGL cu texturi și particule THREE.js
  • THREE.js pentru dezvoltarea jocurilor
  • WebGL cu baza de date THREE.js

credite

Acest articol nu ar fi fost posibil fără ajutorul generos din partea comunității Animation at Work Slack, așa că aș vrea să-i mulțumesc lui Stephen Shaw, Jeff Ayer, Louis Hoebregts, Neil Pullman, Eli Fitch și Chris Johnson.