Malen mit Zahlen, Teil RS5 – Zoomen mit der Kamera

Im letzten Beitrag haben wir begonnen unsere Kamera zu »bewegen«. Allerdings war sie immer noch relativ groß und sehr nahe an den Objekten dran. In diesem Beitrag werden wir jetzt die Sensorgröße ändern und zoomen – bzw. mit dem Rest der Welt wieder das Gegenteil machen.

Die Animation in Abb. 1 zeigt unser Ziel: Wir simulieren eine Kleinbildkamera mit einem Bildsensor der Größe 36 mm x 24 mm (»full-frame«). Typischerweise kann man dann verschiedene Objektive aufsetzen, die sich in erster Linie durch ihre Brennweiten unterscheiden. Je größer die Brennweite, desto größer der Zoom.

Abb. 1: Der Abstand d der Kamera zum Kugelmittelpunkt bleibt konstant 3 m, die Brennweite n ändert sich.

Die Kamera steht an einem fixen Ort und hat zunächst nahe herangezoomt (Brennweite 135 mm). Anschließend zoomt sie heraus (bis Brennweite 24 mm) und dann wieder hinein. Je kleiner die Brennweite, desto kleiner erscheinen die Objekte. Gleichzeitig sieht man mehr von der Umgebung.

Weiterlesen „Malen mit Zahlen, Teil RS5 – Zoomen mit der Kamera“

Malen mit Zahlen, Teil RS4 – »Bewegen der Kamera«

Im letzten Teil haben wir die Objekte in unserer Szene bewegt, indem wir sie mit Transformationsmatrizen aus einer Standardlage heraus verdreht, skaliert und verschoben haben. In diesem Teil werden wir jetzt die Kamera »bewegen« – bzw. den Rest der Welt genau umgekehrt.

Wir wollen uns mit der Kamera durch eine Szene bewegen können, z.B. in einem Flugsimulator. Ein einfaches Beispiel einer bewegten Kamera ist in Abb. 1 gezeigt. Unsere Kamera soll eine Szene umkreisen und immer in deren Mitte schauen. Die Kamera ist dabei etwas unterhalb und zeigt leicht nach oben.

Abb. 1: Die Kamera (weiße Pyramide) soll ein paar Objekte umkreisen und immer in deren Richtung schauen.
Weiterlesen „Malen mit Zahlen, Teil RS4 – »Bewegen der Kamera«“

Malen mit Zahlen, Teil RS3 – Transformierte Objekte

In Teil RS2 haben wir Objekte als Drahtgitter-Modelle fix im Raum dargestellt. In diesem Teil sollen diese Objekte mithilfe der Matrizen aus Teil 2 animiert werden (s. Abb. 1).

Abb. 1: Animation einiger Drahtgitter-Modelle mit Hilfe von Matrizen. Die roten, grünen und blauen Linien sind die lokalen x-, y- bzw. z-Achsen der einzelnen Modelle.
Weiterlesen „Malen mit Zahlen, Teil RS3 – Transformierte Objekte“

Malen mit Zahlen, Teil RS2 – Drahtgittermodelle

Im letzten Teil haben wir nur Punkte gemalt. In dieser Folge zeichnen wir endlich Linien im Raum. Das ergibt Bilder wie in Abb. 1, in dem die Kanten von drei Würfeln und Breiten-/Längenkreise auf einer Kugel zu sehen sind. Wenn wir Würfel aus kleinen Drahtstücken zusammenlöten, sehen sie so ähnlich aus wie in Abb. 1. Man spricht daher von Drahtgitter- bzw. Wireframe-Modellen.

Abb. 1: Ein paar Drahtgitter-Modelle im Raum.

Punkte haben wir schon projiziert, aber wie projizieren wir Linien im Raum auf den Schirm?

Weiterlesen „Malen mit Zahlen, Teil RS2 – Drahtgittermodelle“

Malen mit Zahlen, Teil RS1c – Der Code für Kamera und Punkte

Dieser Beitrag liefert den versprochenen Code zum Teil RS1. Geschrieben habe ich ihn in Processing, das im Wesentlichen ein vereinfachtes Java mit ein paar Goodies ist.

Warum Processing?

Normalerweise veranstalte ich Tagesevents zu 3D-Computergraphik in der letzten Schulwoche. Unsere Schüler können dabei frei aus Events wählen und auch der Klassenverband ist dann aufgelöst. Ich habe also 20+ Teilnehmer aus unterschiedlichen Jahrgängen, Abteilungen und natürlich mit unterschiedlichen Laptops und Betriebssystemen. Manche haben unter Windows noch nie die Kommandozeile gesehen …

Weiterlesen „Malen mit Zahlen, Teil RS1c – Der Code für Kamera und Punkte“

Malen mit Zahlen, Teil RS1 – Kamera und Punkte

Das ist der erste Teil der Serie über 3D-Computergraphik, der sich speziell mit Rasterung/Schattierung beschäftigt. Obwohl es natürlich Überschneidungen gibt, möchte ich hier nicht auf spezielle Bibliotheken wie OpenGL oder Direct3D eingehen. Es wird aber wahrscheinlich noch eine Unterserie zu WebGL geben.

Die Standardkamera

Bevor wir etwas rastern können, müssen wir zunächst Punkte im Raum auf unsere Kamera projizieren. Fürs Erste verwenden wir dazu die in Abb. 1 gezeigte inverse Lochkamera (s. Teil 0).

Abb. 1: Unsere Standard-Lochkamera. Der »eye point« (das Loch) ist im Ursprung und der Schirm liegt in der Ebene z = -1. Die Kreuze auf den Achsen haben jeweils eine Längeneinheit Abstand.
Weiterlesen „Malen mit Zahlen, Teil RS1 – Kamera und Punkte“

Computertomographie (CT), Teil 6

Eine Linie aus kleinen Quadraten

In Teil 5 haben wir die Rasterung besprochen und gesehen, wie man Punkt-Koordinaten in der »realen« Welt in Pixel-Koordinaten umrechnet. Jetzt müssen wir diese Punkte durch eine Linie aus Pixeln verbinden (s. Abb. 1). Die Pixel, in denen die Punkte P und Q liegen, gehören auf jeden Fall dazu. Aber welche noch?

Linie1
Abb. 1: Durch welche Pixel geht die Verbindungslinie von P und Q?

Dieses Problem trat schon zu Beginn der Computergraphikära auf und wurde in den verschiedensten Varianten gelöst. Im Folgenden besprechen wir eine Variante des Bresenham-Algorithmus für Linien.

Weiterlesen „Computertomographie (CT), Teil 6“

Computertomographie (CT), Teil 5

Der diskrete Charme der Pixel

Wie schon gesagt, muss man für die Rückprojektion der Schattenbilder ein Pixel-Gitter über die reale physikalische Szene legen (s. Abb. 1). Man spricht dabei von Rasterung. Nachdem es sich um eine kreisförmige Szene mit Radius r handelt, ist das Gitter sinnvollerweise quadratisch, und die Anzahl der Pixel in x– und y-Richtung wird gleich gewählt, also n_x = n_y = n. Die Pixel sind dann Quadrate mit einer realen Seitenlänge von s = 2 r / n. Um die Formeln etwas zu vereinfachen wählen wir für n eine gerade Zahl, was keine große Einschränkung bedeutet.

Gitter1
Abb. 1: Das kreisförmige Gebiet mit Radius r wird mit einem (8×8)-Pixelgitter überdeckt. Der Ursprung des Pixel-Koordinatensystems befindet sich links oben. Die i-Achse zeigt wie die x-Achse nach rechts, die j-Achse zeigt entgegen der y-Achse nach unten.

Weiterlesen „Computertomographie (CT), Teil 5“