Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.06.2015, 18:19

Weltkoordinaten: An welche Stelle platziert man die Kamera?

Hallo an alle.

Ich arbeite gerade diese Tutorialreihe durch: http://www.spieleprogrammierung.net/2010…ung-teil-8.html


Den Schritt von Modellkoordinaten zu Weltkoordinaten habe ich verstanden. Ich komme aber nicht von den Weltkoordinaten zu den Sichtkoordinaten. :(

Jetzt kommt also eine Kamera ins Spiel, die festlegt aus welcher Position und welchem Winkel auf die Objekte geschaut wird.


Aber wohin soll ich die Kamera "hinstellen" und wo soll sie hinschauen?


Soll sie im Punkt (0,0,0) also im Ursprung des Weltkoordinatensystems stehen?

Krane

Treue Seele

Beiträge: 312

Wohnort: Innsbruck, Tirol

  • Private Nachricht senden

2

07.06.2015, 18:28

Wo sich die Kamera befinden soll hängt natürlich vom Spiel ab.
In den meisten Fällen bewegt sich die Kamera dann anschließend noch.
Wenn du ein Modell renderst, dann soll dieses natürlich auch sichtbar sein, also platzierst du die Kamera vor das Objekt.

3

07.06.2015, 21:14

Hey Krane, und vielen Dank für die Antwort. :)
Das macht Sinn.
Eine andere Sache, die ich nicht verstehe ist:
In dem Tutorial werden die Vektoren Right, Up und Look benötigt, um die View Matrix zu erstellen.
Ich habe aber gar nicht verstanden wie diese Vektoren bestimmt werden?Kann das bitte jemand erklären? Oder auf einen ausführlichen Link verweisen?
Ich will nicht einfach copy & paste machen, sondern verstehen was gemacht wird und warum es gemacht wird.
Vielen Dank :)

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

07.06.2015, 22:34

Die drei Vektoren bestimmen die Orientierung der Kamera. Look legt fest wohin die Kamera ausgerichtet ist, Right und Up geben zusammen an wie die Kamera um die eigene Achse rotiert ist.´

In dem Tutorial ist ein Beispiel im Code wo die Kamera auf das Objekt gerichtet wird. Wenn du für Up einfach die entsprechende Koordinatenachse nutzt, hast du eine gerade stehende Kamera. Right kann, wie im Code steht, über das Kreuzprodukt bestimmt werden, wenn look und up gegeben sind.

5

07.06.2015, 22:48

Mit den drei Vektoren (bzw. der View-Matrix) beschreibt man im Endeffekt den View Space. Dort liegt die Kamera im Ursprung (0, 0, 0) und die Blickrichtung stellt die z-Achse (nach hinten) dar. Mit Hilfe der View Matrix können die Objekte, deren Position im World Space ja über die World Matrix bestimmt wurde, in den View Space transformiert werden. Damit liegt das Objekt dann so, wie wir es aus dem "Auge der Kamera" der Kamera erwarten würden.

6

08.06.2015, 15:21

Dankeschön Tobiking und Bitbridge!

Das heißt also wir erzeugen ein ganz neues Koordinatensystem, in dem sich die Kamera im Punkt (0,0,0) befindet. Und nicht etwa wie ich gedacht habe im Punkt (0,0,0) des Weltkoordinatensystems. Dieser Punkt (0,0,0), der hat aber nichts mit der Position der Kamera zu tun, die ich in der View Matrix angeben muss?#


Also angenommen in der View Matrix würde ich die Kamera Position (1,1,1) wählen. Würde die Kamera dann auch im View Space die Position (1,1,1) haben?
Oder hat die Kamera im World Space die Koordinaten (1,1,1), aber im View Space (0,0,0)?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ul5391« (08.06.2015, 15:37)


7

08.06.2015, 18:38

Die Kamera würde im View Space immer noch die Position (0, 0, 0) haben, weil so der View Space definiert ist (d.h. der Raum, den die Kamera aufspannt). Im World Space läge die Kamera bei den Koordinaten (1, 1, 1). Da du auf deinem Bildschirm aber alles aus dem Auge/der Position der Kamera siehst, müssen ja alle Objekte so transformiert/projiziert werden, dass sie in korrekter Größe und Position auf dem Bildschirm erscheinen.

Kurzes Beispiel: Haus befindet sich im World Space auf Position (0, 0, 2) (also "weit hinten"). Die Kamera befindet sich im World Space auf Position (0, 0, 1), was in der View Matrix beschrieben ist. Wenn Du das jetzt auf dem Bildschirm darstellen willst, muss das Haus ja größer erscheinen, weil die Kamera näher am Objekt ist als wenn du den World Space darstellen würdest. Daher wendest Du die View Matrix auf das Haus an. Das Haus wird damit quasi um (0, 0, 1) nach vorne geschoben, befindet sich näher an der Kamera und wird größer gerendert. Wenn Du die Kamera nach vorne bewegst, würdest Du damit das Haus näher ziehen.

Deswegen sagt man oft auch, dass man eigentlich nicht die Kamera bewegt, sondern die Objekte sich bewegen und es dann so wirkt, als würde man sich in der Welt bewegen. Das ist hier ganz gut dargestellt (unten bei "Model Space, World Space, View Space"): http://www.codinglabs.net/article_world_…ion_matrix.aspx

Der View Space ist damit ein Zwischenschritt um die Szene später möglichst einfach auf den Bildschirm zu bringen (d.h. erst in den Projection Space und dann Screen Space).

Werbeanzeige