Inhaltsverzeichnis

3D-Grafik: Kamera

Die Online-IDE unterstützt derzeit zwei Typen von Kameras:

  • PerspectiveCamera3d bildet den 3d-Raum in Zentralperspektive auf den Monitor ab
  • OrthographicCamera3d 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)

Dabei ist

  • 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