WebGLGamemitThree.js

WebGL Game mit Three.js

Zusammen mit dem Relaunch der neuen Demodern Website haben wir ein Mini WebGL Game umgesetzt. Zum einen als Prof-of-Concept, dass aufführt wie WebGL die Web Experience steigert und zum anderen da WebGL einfach unser digitales Herz schneller schlagen lässt.

Für die Umsetzung  benutzten wir  Three.js R68, eine JavaScript library/API zum Erstellen von WebGL-Animationen/Grafiken im Browser.

In diesem Artikel geben wir einen kurzen Überblick für ein simples "Hello Three.js" sowie Einblicke in die ein oder andere Herausforderung in der Umsetzung unseres WebGL-Games.


„Hello Three.js“

DER RENDERER

DIE SCENE

DIE KAMERA

DAS LICHT

DAS OBJEKT: BOX

Das Zwischenergebnis sollte nun so aussehen.

Falls nicht, keine Sorge. Den Code findet Ihr auch auf GitHub.

Nichtsdestotrotz sieht das ganze ein wenig langweilig aus, also lasst uns die Box animieren.

DAS OBJEKT: PLANE

DIE ANIMATION

Jetzt müsstet Ihr eine grüne und rotierende Box sehen, sowie einen grauen Untergrund.

Den Code findet Ihr ebenfalls auf  GitHub


„Three.js Game Parts“

Ok... alles schön und gut, aber wie kommen wir nun von einer grünen Box zu einem WebGL-Mini Game? Also lasst uns einmal die "Knackpunkte" auseinander nehmen.

DIE HEIGHTMAP

Wir nehmen uns eine noisemap zur Hand, eine Art grauskaliertes PNG und lassen es in einen 2D canvas rendern. Daraufhin gehen wir jeden einzelnen Pixel dieses canvas durch und konvertieren die Pixeldaten in für uns brauchbare Werte. Zum Beispiel bekommt ein grauer Pixel den Wert 15 und ein schwarzer den Wert 25.

Danach bestimmen wir die Höhe der Eckpunkte unserer verwendeten Three.js Geometrie anhand der konvertierten Pixelwerte. Das bedeutet, dass z. B. ein weißer Pixel den tiefsten Punkt abbildet und ein schwarzer den höchsten.

BILDDATEN AUSLESEN

TERRAIN ERSTELLEN

DIE KOLLISIONSABFRAGE

Aus Performancegründen wollten wir auf eine Physik-Engine verzichten. Somit behalfen wir uns der THREE.Raycaster Klasse, welche zusammen mit Three.js gebündelt ist.

FAZIT

Für unser WebGL-Game sind wir mit Three.js ganz gut gefahren um innerhalb kurzer Zeit ein Ergebnis zu erreichen. Three.js ist noch relativ neu, und es gibt noch viel Raum nach oben. Aber three.js entwickelt sich weiter, und andere WebGl Plattformen wie away3D und auch der UnityV5 WebGl export zeigen das wir erst am Anfang sind. Heißhunger haben wir auf jeden Fall.

Links:

ThreeJs

Away3D

Unity5 WebGL

Sourcecode auf Github