Partager via


Comment : déplacer et pointer la caméra

Mise à jour : novembre 2007

Vous pouvez déplacer et pointer la caméra dans une scène Direct3D à l'aide de transformations de l'affichage.

Remarque :

Les applications Direct3D mobiles managées requièrent le logiciel Windows Mobile version 5.0 pour les périphériques Pocket PC et Smartphone. Consultez Ressources externes pour le .NET Compact Framework pour plus d'informations sur le logiciel Windows Mobile et les Kits de développement logiciel.

Les transformations de l'affichage translatent les objets Direct3D de l'espace universel vers l'espace écran. Lorsque vous réalisez une transformation de l'affichage, la prise en compte de la position de la caméra (ou visionneuse), de la cible de la caméra et du système de coordonnées vous permet de manipuler le résultat à l'écran et de garantir la transformation correcte des coordonnées de votre espace universel en coordonnées de l'espace écran.

L'espace universel est basé sur un système de coordonnées situé à gauche, dans lequel les valeurs positives de l'axe des ordonnées (y) évoluent vers le haut et celles de l'axe des abscisses (x) vers la droite. Les valeurs positives de l'axe z évoluent à partir d'une visionneuse hypothétique. À l'inverse, dans un système de coordonnées situé à droite, les valeurs positives de l'axe z évoluent vers la visionneuse.

La propriété Transform du périphérique retourne une structure Matrix qui décrit un état de transformation. Pour déplacer et pointer la caméra, passez une matrice de transformation de l'affichage à l'objet du périphérique à l'aide de la méthode LookAtLH pour gérer la transformation.

Dans l'exemple suivant, la caméra commence d'abord derrière la scène, à un point positif sur l'axe z, avant de cibler un point près de l'origine. La caméra étant située derrière la scène, les valeurs positives de l'axe z rapprochent les objets de la caméra au lieu de les éloigner. En outre, les valeurs positives de l'axe x éloignent les objets vers la gauche et non vers la droite.

Exemple

L'exemple de code suivant illustre une transformation de l'affichage pour une application qui anime un maillage de zone primitif représentant un bateau. Pour obtenir l'exemple de code complet, consultez Comment : transformer des objets Direct3D.

Cet exemple de code comprend plusieurs objets, notamment :

  • un objet Mesh primitif représentant un bateau ;

  • un objet Device.

' 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;
}

Compilation du code

Cet exemple requiert l'exemple de code complet de la rubrique Comment : transformer des objets Direct3D.

Voir aussi

Concepts

.Rubriques Comment relatives au .NET Compact Framework

Autres ressources

Programmation Direct3D Mobile dans le .NET Compact Framework