Freigeben über


Gewusst wie: Verschieben und Ausrichten der Kamera

Aktualisiert: November 2007

Sie können die Kamera in einer Direct3D-Szene mithilfe von Ansichtstransformationen verschieben und ausrichten.

Hinweis:

Für verwaltete Direct3D Mobile-Anwendungen ist Windows Mobile, Version 5.0, für Pocket PCs und Smartphones erforderlich. Weitere Informationen zu Windows Mobile-Software und SDKs finden Sie unter Externe Ressourcen für .NET Compact Framework.

Mit Ansichtstransformationen werden Direct3D-Objekte vom Weltkoordinatensystem in das Bildschirmkoordinatensystem übersetzt. Wenn Sie eine Ansichtstransformation durchführen, können Sie aufgrund Ihres Wissens über die Kameraposition (oder Blickrichtung des Betrachters), das Kameraobjekt und das Koordinatensystem das Ergebnis auf dem Bildschirm verändern und sicherstellen, dass Ihre Weltkoordinaten korrekt in Bildschirmkoordinaten umgewandelt werden.

Das Weltkoordinatensystem basiert auf einem linkshändigen Koordinatensystem, in dem sich, aus der Sicht eines hypothetischen Betrachters, die positiven y-Werte nach oben, die positiven x-Werte nach rechts und die positiven z-Werte vom Betrachter weg bewegen. Umgekehrt bewegen sich in einem rechtshändigen Koordinatensystem die positiven Werte auf der z-Achse auf den Betrachter zu.

Die Transform-Eigenschaft des Geräts gibt eine Matrix-Struktur zurück, die einen Transformationszustand beschreibt. Um die Kamera zu bewegen und auszurichten, übergeben Sie eine Ansichtstransformationsmatrix an das Geräteobjekt, wobei Sie die LookAtLH-Methode zum Behandeln der Transformation verwenden.

Im folgenden Beispiel startet die Kamera zunächst hinter der Szene an einem positiven Punkt auf der z-Achse und blickt auf einen Punkt in der Nähe des Ursprungs. Da sich die Kamera hinter der Szene befindet, bringen positive Werte auf der z-Achse Objekte näher an die Kamera heran statt weiter weg. Außerdem platzieren positive x-Achsen-Werte Objekte weiter nach links statt nach rechts.

Beispiel

Das folgende Codebeispiel zeigt eine Ansichtstransformation für eine Anwendung, bei der ein primitives quaderförmiges Gitter animiert wird, das ein Schiff darstellen soll. Den vollständigen Beispielcode finden Sie unter Gewusst wie: Transformieren von Direct3D-Objekten.

Dieses Codebeispiel enthält mehrere Objekte, darunter die folgenden:

  • Ein primitives Mesh-Objekt, das ein Schiff darstellt.

  • Ein Device-Objekt.

' Set up the view matrix. You can define a view matrix with a camera position,
' a point to look at (camera target), and an "up" direction.
' First vector passed to LookAtLH is the camera position.
' Second vector passed to LookAtLH is the camera target.
' Third vector passed to LookAtLH defines the "up" direction.
' In this example, you set the camera seven units up along the z-axis ("behind"
' the scene), down one unit, and left two units. You then point the camera
' just above the origin and define "up" to be in the y-direction.
If Not isShipDeparted Then
    device.Transform.View = Matrix.LookAtLH(New Vector3(- 2, - 1, 7), New Vector3(0, 1, 0), New Vector3(0, 1, 0))
Else
    ' Handles movement of camera after 
    ' the ship "fires" the main engines.
    device.Transform.View = Matrix.LookAtLH(New Vector3(xCameraPosition, yCameraPosition, 7), New Vector3(0, 1, 0), New Vector3(0, 1, 0))
    xCameraPosition += 0.01F
    yCameraPosition += 0.01F
End If
// Set up the view matrix. You can define a view matrix with a camera position,
// a point to look at (camera target), and an "up" direction.
// First vector passed to LookAtLH is the camera position.
// Second vector passed to LookAtLH is the camera target.
// Third vector passed to LookAtLH defines the "up" direction.
// Here, you set the camera seven units up along the z-axis ("behind"
// the scene), down one unit, and left two units. You then point the camera
// just above the origin and define "up" to be in the y-direction.
if (!isShipDeparted)
{
    device.Transform.View = Matrix.LookAtLH(new Vector3(-2, -1, 7),
        new Vector3(0, 1, 0), new Vector3(0, 1, 0));
}
else
{
    // Handles movement of camera after 
    // the ship "fires" the main engines.
    device.Transform.View = Matrix.LookAtLH(new Vector3(xCameraPosition, 
        yCameraPosition, 7), new Vector3(0, 1, 0), new Vector3(0, 1, 0));
    xCameraPosition += 0.01f;
    yCameraPosition += 0.01f;
}

Kompilieren des Codes

Für dieses Beispiel ist der vollständige Beispielcode in Gewusst wie: Transformieren von Direct3D-Objekten erforderlich.

Siehe auch

Konzepte

Gewusst-wie-Themen für .NET Compact Framework

Weitere Ressourcen

Mobile Direct3D-Programmierung in .NET Compact Framework