Kamera: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
Keine Bearbeitungszusammenfassung |
veraltete MSDN Link entfernt |
||
| (8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 51: | Zeile 51: | ||
; Field of View | ; Field of View | ||
: Das field of View (kurz: FOV) bezieht sich auf den Winkel zwischen der oberen und unteren Grenze des View Frustums. Damit bestimmt es die Höhe der projizierten Sicht auf die Spielwelt. | : Das field of View (kurz: FOV) bezieht sich auf den Winkel zwischen der oberen und unteren Grenze des View Frustums. Damit bestimmt es die Höhe der projizierten Sicht auf die Spielwelt. | ||
{{BA|Florian|TODO: View- und Projection Matrix hier mit aufnehmen und erklären}} | |||
<br clear="All"> | <br clear="All"> | ||
| Zeile 60: | Zeile 62: | ||
[[Datei:orthographic_camera_presentation.jpg|thumb|250px|Typische Orthographische Kameradarstellung: Super Mario World von Nintendo]] | [[Datei:orthographic_camera_presentation.jpg|thumb|250px|Typische Orthographische Kameradarstellung: Super Mario World von Nintendo]] | ||
Der Name der 2D Darstellung kommt von der verwendeten Projektion beim Renderprozess, typischerweise eine parallele orthographische Projektion. Bei dieser Art der Projektion bleiben parallele Linien parallel, was bei einer | Der Name der 2D Darstellung kommt von der verwendeten Projektion beim Renderprozess, typischerweise eine parallele orthographische Projektion. Bei dieser Art der Projektion bleiben parallele Linien parallel, was bei einer perspektivischen Projektion nicht der Fall ist. Durch das Verwenden verschiedener Ebenen lässt sich auch hier ein Eindruck von Tiefe erzeugen. | ||
<br clear="All"> | <br clear="All"> | ||
=== | === Perspektivische Darstellung (3D-Kamera) === | ||
[[Datei:camera_perspective_projection.png|thumb|250px|Typische dreidimensionale perspektifische Projektion]] | [[Datei:camera_perspective_projection.png|thumb|250px|Typische dreidimensionale perspektifische Projektion]] | ||
Die meisten Spiele verwenden eine Darstellungsart, die eine dreidimensionale Sicht der Spielwelt in einer Art simuliert, die der menschlichen optischen Wahrnehmung sehr ähnlich ist. Dies wird durch eine | Die meisten Spiele verwenden eine Darstellungsart, die eine dreidimensionale Sicht der Spielwelt in einer Art simuliert, die der menschlichen optischen Wahrnehmung sehr ähnlich ist. Dies wird durch eine perspektivische Projektion ermöglicht, bei der parallele Linien so gerendert werden, dass sie in Fluchtpunkten zusammenlaufen. Diese Art der Projektion erzeugt beim Abbilden von Punkten der Spielwelt auf eine flache Ebene Verzerrungen die von der Position des Betrachters, also der Kamera, abhängig sind. | ||
<br clear="All"> | <br clear="All"> | ||
=== Hybride Darstellung (2.5D-Kamera) === | === Hybride Darstellung (2.5D-Kamera) === | ||
| Zeile 79: | Zeile 80: | ||
Der Unterschied in der Darstellung zu einem rein zweidimensionalen Ansatz ist der, dass einige Elemente eine dreidimensionale Ansicht simulieren, obwohl das Spiel hauptsächlich als eine orthographische Projektion dargestellt wird. Dies können Spielobjekte oder auch genauso Teile des Hintergrunds sein. | Der Unterschied in der Darstellung zu einem rein zweidimensionalen Ansatz ist der, dass einige Elemente eine dreidimensionale Ansicht simulieren, obwohl das Spiel hauptsächlich als eine orthographische Projektion dargestellt wird. Dies können Spielobjekte oder auch genauso Teile des Hintergrunds sein. | ||
Die am häufigsten verwendete parallele Projektion zum Erzeugen von peuso-dreidimensionalen Ansichten ist die isometrische Projektion. Diese Projektion gibt eine pseudo 3D-Ansicht der Welt, wobei oft vorgerenderte Hintergrundgrafiken mit vorgerenderten oder dynamisch gerenderten Sprites kombiniert werden, welche zur selben Projektion passen. Die isometrische Projektion wird | Die am häufigsten verwendete parallele Projektion zum Erzeugen von peuso-dreidimensionalen Ansichten ist die isometrische Projektion. Diese Projektion gibt eine pseudo 3D-Ansicht der Welt, wobei oft vorgerenderte Hintergrundgrafiken mit vorgerenderten oder dynamisch gerenderten Sprites kombiniert werden, welche zur selben Projektion passen. Die isometrische Projektion wird aufgrund dieser Illusion der Tiefe oft als 2.5D bezeichnet. | ||
<br clear="All"> | <br clear="All"> | ||
| Zeile 161: | Zeile 162: | ||
### Verwerfe (sog. Culling) alle projizierten Primitive die außerhalb des sichtbaren Bereichs liegen und schneide die die ihn überkreuzen zurecht (sog. Clipping). | ### Verwerfe (sog. Culling) alle projizierten Primitive die außerhalb des sichtbaren Bereichs liegen und schneide die die ihn überkreuzen zurecht (sog. Clipping). | ||
### Zeichne die Primitive. Dies erfolgt bei aktuellen Grafikkarten mittels Rasterisierung. | ### Zeichne die Primitive. Dies erfolgt bei aktuellen Grafikkarten mittels Rasterisierung. | ||
== Kameraberechnungen in XNA == | |||
; Berechnung der View Matrix: | |||
<source lang="csharp"> | |||
Vector3 position; | |||
Vector3 target; | |||
Vector3 orientation; | |||
Matrix orientationMatrix = Matrix.CreateFromYawPitchRoll(this.orientation.Y, this.orientation.X, this.orientation.Z); | |||
//Berechnung der View Matrix für den Blick auf eine Zielposition | |||
Matrix viewMatrix = Matrix.CreateLookAt(this.position, this.target, Vector3.Up); | |||
//Oder alternativ Berechnung der View Matrix anhand der Orientierung der Kamera | |||
Matrix viewMatrix = Matrix.CreateLookAt(this.position, this.position + this.orientationMatrix.Forward, Vector3.Up); | |||
</source> | |||
; Berechnung der Projection Matrix: | |||
<source lang="csharp"> | |||
float fieldOfView; | |||
float aspectRatio; | |||
float nearPlane; | |||
float farPlane; | |||
Matrix projectionMatrix = Matrix.CreatePerspectiveFieldOfView(this.fieldOfView, this.aspectRatio, this.nearPlane, this.farPlane); | |||
</source> | |||
; Berechnung des View Frustums, z.B. zum Cullen nicht sichtbarer Objekte: | |||
<source lang="csharp"> | |||
Matrix viewProjectionMatrix = this.viewMatrix * this.projectionMatrix; | |||
BoundingFrustum viewFrustum = new BoundingFrustum(viewProjectionMatrix); | |||
</source> | |||
== Referenzen == | == Referenzen == | ||
# '''Real-Time Cameras: A Guide for Game Designers and Developers''' von Mark Haigh-Hutchinson | # '''Real-Time Cameras: A Guide for Game Designers and Developers''' von Mark Haigh-Hutchinson | ||
[[Kategorie:Begriffe]] | |||
[[Kategorie:MS01]] | |||
[[Kategorie:MS02]] | |||
[[Kategorie:MS03]] | |||
[[Kategorie:MS04]] | |||
[[Kategorie:Tutorials]] | |||
