Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
computer:basteln:threejs [2014/09/22 17:50] gaubes |
computer:basteln:threejs [2018/03/16 21:11] (aktuell) |
||
---|---|---|---|
Zeile 52: | Zeile 52: | ||
==== THREE.PlaneGeometry() ==== | ==== THREE.PlaneGeometry() ==== | ||
Außerdem lassen sich nicht nur 3D- Figuren erzeugen, sondern auch Ebene Flächen erzeugen. Dieses geschieht zum Beispiel mit der THREE.PlaneGeometry(x,y) Funktion. Die Fläche wird schließlich x px breit und y px hoch. | Außerdem lassen sich nicht nur 3D- Figuren erzeugen, sondern auch Ebene Flächen erzeugen. Dieses geschieht zum Beispiel mit der THREE.PlaneGeometry(x,y) Funktion. Die Fläche wird schließlich x px breit und y px hoch. | ||
+ | Ebenso gibt es eine CircleGeometry(x) Funktion für einen flachen Kreis. | ||
+ | |||
+ | ===== Renderer ===== | ||
+ | Alternativ zum Canvas-Renderer gibt es den WebGL-Renderer, der es zulässt mit Licht, Schatten und mehr Materialvarianten zu arbeiten. | ||
+ | Jedoch haben nicht alle aktuell am Netz verbundenen Rechner die Möglichkeit auf WebGL zurückzugreifen, daher ist es für manche besser beim Canvas-Renderer zu bleiben. | ||
+ | Den WebGL-Renderer kann man folgendermaßen benutzen: | ||
+ | <code javascript> | ||
+ | var renderer = new THEE.WebGLRenderer(); | ||
+ | </code> | ||
+ | |||
+ | ===== Camera ===== | ||
+ | Alternativ zur PerspectiveCamera bietet Threejs die Möglichkeit eine orthografische Kamera zu nutzen. | ||
+ | Orthografische Kameras haben beispielsweise in 2D-Spielen deutliche Vorteile oder in Spielen, bei denen große Distanzen auf den Screen gebracht werden. | ||
+ | <code javascript> | ||
+ | var width = window.innerWidth; | ||
+ | var height = window.innerHeight; | ||
+ | var camera = new THREE.OrthographicCamera(-width/2,width/2,height/2,-height/2,1,10000); | ||
+ | </code> | ||
+ | Im Vergleich zur PerspectiveCamera werden die Grenzen statt dem Verhältnis eingefügt. | ||
+ | |||
+ | ===== Material ===== | ||
+ | Bisher wurde nur das MeshBasicMaterial() als ''normales'' Material erwähnt. Da Körper mit dieser Umhüllung nicht die schönsten sind, besteht zunächst einmal die Möglichkeit, die Farbe zu ändern: | ||
+ | <code javascript> koerper.color.setRGB(0.36,0.54,0.66);</code> | ||
+ | Dabei stehen die Zahlen jeweils für prozentuale Anteile der Farben rot, grün und blau. | ||
+ | |||
+ | ==== WebGL ==== | ||
+ | Befindet man sich nun im WebGL-Renderer, so kann man mit Licht, Reflektion am Material und Schatten arbeiten. | ||
+ | |||
+ | === Licht === | ||
+ | Damit das Licht auf einem Körper gut strahlen kann und er nicht matt bleibt sollte man das | ||
+ | ** THREE.MeshPhongMaterial()** benutzen und eine Lichtquelle zur Szene hinzufügen. | ||
+ | <code javascript> | ||
+ | var sonnenlicht = new THREE.DirectionalLight(); | ||
+ | sonnenlicht.intensity =0.5; | ||
+ | sonnenlicht.position.set (100,100,100); | ||
+ | scene.add(sonnenlicht); | ||
+ | </code> | ||
+ | Benutzt man nun das MeshPhongMaterial, so ändert man die Farbe anders als beim MeshBasicMaterial, nämlich folgendermaßen: | ||
+ | <code javascript> koerper.emissive.setRGB(0.8,0.1,0.1);</code> | ||
+ | Dadurch strahlt die Farbe mehr, als beim color-Attribut. | ||
+ | Weiterhin lässt sich die Lichtspiegelung des Körpers durch das specular-Attribut angeben: | ||
+ | <code javascript> koerper.specular.setRGB(0.9,0.9,0.9);</code> | ||
+ | |||
+ | === Schatten === | ||
+ | Um Schatten zu verwenden muss man diese im Renderer aktivieren: | ||
+ | <code>render.shadowMapEnabled = true;</code> | ||
+ | Weiterhin muss man in dem Programm mitteilen, welches Objekt durch welches Licht auf welchen anderen Körper oder Boden der Schatten geworfen werden soll. Da dieses einiges an Rechnerleistung verwendet, sollte man diesbezüglich sparsam sein. | ||
+ | <code javascript> | ||
+ | scene.add(koerper); | ||
+ | scene.add(sonnenlicht); | ||
+ | koerper.castShadow = true; | ||
+ | sonnenlicht.castShadow = true; | ||
+ | |||
+ | scene.add(boden); | ||
+ | boden.receiveShadow = true; | ||
+ | </code> | ||