Inhaltsverzeichnis
3D-Grafik: Kamera
Die Online-IDE unterstützt derzeit zwei Typen von Kameras:
PerspectiveCamera3d
bildet den 3d-Raum in Zentralperspektive auf den Monitor abOrthographicCamera3d
bildet den 3d-Raum in orthographischer Projektion auf den Monitor ab.
In der Praxis wird meist Zentralperspektive genutzt, daher besitzt das World3d
-Objekt per default ein PerspectiveCamera3d
-Objekt, auf das man via getWorld().getCamera()
von jedem graphischen Objekt aus zugreifen kann. Im folgenden wird daher zunächst dargestellt, wie man die Defaultkamera nutzen kann, danach wird gezeigt, wie man neue Kameras erzeugen und mit der Welt verbinden kann.
Nutzung/Veränderung der Default-Kamera
Die default-Kamera erhält man am einfachsten durch
var camera = (PerspectiveCamera3d)t.getWorld3d().getCamera();
Sie bietet Methoden zum Setzen der Position (setPosition
), Verschieben (move
) und Drehen (rotateX
, …) wie jedes andere Object3d
auch. Darüber hinaus lässt sich mit den Methoden
void lookAt(double xTarget, double yTarget, double zTarget, Vector3 up, boolean keepTarget) void lookAt(Object3d target, Vector3 up, boolean keepTarget)
die Blickrichtung ändern. Dabei ist target
das Objekt, zu dem die Kamera hinsehen soll (alternativ Angabe einer Position durch Koordinaten). Die Kamera wird zusätzlich um die Achse der Blickrichtung so gedreht, dass der up
-Vektor nach oben zeigt. Der Parameter keepTarget
legt fest, ob die Blickrichtung der Kamera nach eventuell nachfolgenden Positionsänderungen der Kamera oder des Target jeweils automatisch so korrigiert werden soll, dass sie weiterhin zum Target blickt.
PerspectiveCamera3d
Der Konstruktor von PerspectiveCamera3d
erwartet folgende Parameter:
PerspectiveCamera3d(double fov, double aspect, double near, double far)
- fov (field of view) das Sichtfeld in Grad. Das menschliche Auge hat ein Sichtfeld von fast 180°. Da der Computermonitor aber meist nur einen begrenzten Bereich dieses Sichtfeldes abdeckt, wird ein Sichtfeld von 45° bis 75° als „normal“ empfunden.
- aspect das Breite:Höhe-Verhältnis des Bildschirms,
- near der Abstand der near-Ebene zur Kameraposition und
- far der Abstand der far-Ebene zur Kameraposition
Vorsicht:
near
und far
müssen beide größer sein als 0.
Der Renderer zeichnet nur Objekte, die in den Bereich hineinragen, der durch die near-Ebene und die far-Ebene begrenzt wird (frustum).
Mit den Methoden
void lookAt(double xTarget, double yTarget, double zTarget, Vector3 up, boolean keepTarget) void lookAt(Object3d target, Vector3 up, boolean keepTarget)
lässt sich die Blickrichtung und die up-Richtung festlegen, mehr dazu im obigen Kapitel (default-Kamera).
Die default-Kamera hat die Parameterwerte
- fov = 75
- near = 0.1
- far = 1000
- Position: (2, 2, 2)
- Blickrichtung: Zum Ursprung
- Up-Richtung: (0, 1, 0)
OrthographicCamera3d
Siehe die entsprechende Dokumentation von three.js