Tutorial three.js Teil 1
Bei der ersten Beispieldarstellung zur 3D-Animation mit WebGL und three.js ist der 3D-Charakter noch nicht ohne weiteres zu erkennen, denn es ist nur die Gitterdarstellung eines Quaders zu sehen. Die Darstellung erfolgt zwar in 3D-Perspektive, ließe sich aber auch mit einer "normalen" Canvas-Zeichnung realisieren.
Ich habe dieses Beispiel aber bewusst einfach gehalten, um zunächst die Grundlagen zu vermitteln. Schauen wir uns daher zunächst den kompletten Quellcode an:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <h1>Basisbeispiel 01 mit three.js</h1> <p>Dieses Beispiel zeigt einen Quader, es gibt aber noch keine Animation.</p> <script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r58/three.min.js"></script> <script> var camera, scene, renderer; var geometry, material, mesh; var init = function () { renderer = new THREE.CanvasRenderer(); renderer.setSize( window.innerWidth/1.5, window.innerHeight/1.5 ); document.body.appendChild( renderer.domElement ); camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 ); camera.position.z = 600; scene = new THREE.Scene(); geometry = new THREE.CubeGeometry( 200, 100, 75 ); material = new THREE.MeshBasicMaterial( { color: 0x0000ff, wireframe: true, wireframeLinewidth: 3 } ); mesh = new THREE.Mesh( geometry, material ); scene.add( mesh ); } init(); mesh.rotation.x = 500; mesh.rotation.y = 700; renderer.render( scene, camera ); </script> </body> </html>
Kommentare und Erklärungen zum Quellcode
Ich verwende hier immer HTML5-Dateien, dass ist jedoch nicht zwingend erforderlich. Mit:
<script src="http://cdnjs.cloudflare.com/ajax/libs/three.js/r58/three.min.js"></script>
wird die three.js-JavaScript-Bibliothek aus cdnjs.com eingebunden. Man kann sie natürlich auch auf dem eigenen Webspace ablegen. Mit:
var camera, scene, renderer; var geometry, material, mesh;
werden die erforderlichen Variablen belegt. Das sind:
camera
- steht stellvertretend für den Betrachterscene
- ist gewissermaßen die Bühne, auf der das Objekt (oder die Objekte) dargestellt werdenrenderer
- der Zeichner, der alles darstelltgeometry
- enthält alle zur Beschreibung des 3D-Modells notwendigen Angabenmaterial
- die Oberfläche des Objektesmesh
- - führt 3D-Modell und Oberfläche zusammen
init
werden die Variablen initialisiert, mit Werten belegt. Mit
document.body.appendChild( renderer.domElement )
wird das von three.js erzeugte Canvas-Element in den DOM-Objektbaum der Webseite eingefügt. Einige Details der Initialisierung:
renderer
Möglich sind entweder WebGLRenderer
oder CanvasRenderer
. Letzterer zeichnet im Canvas-2D-Context, nutzt also nicht WebGL. Er ist lediglich als fallback-Lösung für einfache Szenen sinnvoll. Mit
renderer.setSize( window.innerWidth/1.5, window.innerHeight/1.5 )
wird die Größe der Canvas-Fläche festgelegt, in diesem Fall in Abhängigkeit von der Größe des Browserfensters.
camera
Es gibt PerspectiveCamera
und OrthographicCamera
. Letztere stellt die Szene in orthografischer Projektion dar und kommt nur selten zum Einsatz. Die perspektivische Kamara hat 4 Parameter:
- der Öffnungswinkel, je größer dieser ist, desto mehr Szene wird abgebildet
- das Seitenverhältnis, sinnvollerweise das Verhältnis der Abmessungen des browserfesnters
- die vordere und hintere Begrenzungsebene. Was vor bzw. hinter diesen Ebenen liegt, wird nicht dargestellt.
Mit
camera.position.z = 600;
wird die Position der Kamera (des Betrachters) festgelegt.
geometry
Die three.js-Bibliothek verfügt über eine Reihe geometrischer Basisobjekte wie z.B. CubeGeometry, CylinderGeometry, TorusGeometry, TubeGeometry usw. Die einzelnen Parameter des jeweiligen Objektes richten sich nach dem Typ. Für CubeGeometry sind dies Breite, Höhe und Tiefe sowie optional die Anzahl der Segmente für die Breite, Höhe und Tiefe.
material
Diese Variable ist für die Oberfläche des Objektes zuständig. Im konkreten Fall wird lediglich ein Gitternetz in der Farbe Blau und mit einer Linienstärke von 3px verwendet.
mesh
Mit diesem Objekt werden geometrische Form und Oberfläche zusammengeführt.
scene.add( mesh )
fügt dann das so entstandene Gesamtobjekt der Scene hinzu.
Anzeige
Die Variablenbelegung ist in der Funktion init zusammengefasst, die natürlich mit init(); auch aufgerufen werden muss. Danach folgt noch eine leichte Drehung des Quaders:mesh.rotation.x = 500; mesh.rotation.y = 700;(diese Werte lönnte man hier auch in die Initialisierung schreiben) und schließlich das Zeichnen der Szene:
renderer.render( scene, camera );
Im 2.Teil des Tutorials zu three.js beschreibe ich, wie das 3D-Objekt animiert wird.