====== 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 [[https://en.wikipedia.org/wiki/Orthographic_projection|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) {{ :api:documentation:grafik3d:kamera:perspective_camera.svg?400 |}} 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 [[https://threejs.org/docs/#api/en/cameras/OrthographicCamera|Dokumentation von three.js]]