Cómo: Mover y seleccionar el objetivo de la cámara

Actualización: noviembre 2007

Puede mover y seleccionar el objetivo de la cámara en una escena de Direct3D por medio de transformaciones de vista.

Nota:

Las aplicaciones móviles Direct3D administradas requieren el software de Windows Mobile versión 5.0 para dispositivos Pocket PC y Smartphone. Vea Recursos externos de .NET Compact Framework para obtener información sobre el software de Windows Mobile y los SDK.

Las transformaciones de vista trasladan objetos Direct3D desde el espacio real hasta el espacio en pantalla. Al realizar una transformación de vista, su conocimiento de la posición de la cámara (u observador), del objetivo de la cámara y del sistema de coordenadas le permite manipular el resultado en la pantalla y garantiza que las coordenadas en el espacio real se transforman correctamente en coordenadas en el espacio de la pantalla.

El espacio real se basa en un sistema de coordenadas de mano izquierda, en el cual el eje y positivo apunta hacia arriba, el eje x positivo apunta hacia la derecha y el eje z positivo se aleja de un observador hipotético. A la inversa, en un sistema de coordenadas de mano derecha, el eje z positivo apunta hacia el observador.

La propiedad Transform del dispositivo devuelve una estructura Matrix que describe un estado de transformación. Para mover y seleccionar el objetivo de la cámara, pase una matriz de transformaciones de vista al objeto del dispositivo utilizando el método LookAtLH para controlar la transformación.

En el ejemplo siguiente, la cámara comienza inicialmente detrás de la escena, en un punto positivo del eje z, y selecciona como objetivo un punto próximo al origen. Dado que la cámara se encuentra detrás de la escena, los valores del eje z positivo indican los objetos más próximos a la cámara. Además, los valores del eje x positivo indican los objetos situados más a la izquierda que a la derecha.

Ejemplo

En el ejemplo de código siguiente se muestra una transformación de vista para una aplicación que anima una malla primitiva que representa un barco. Para obtener el código de ejemplo completo, vea Cómo: Transformar objetos de Direct3D.

Este ejemplo de código contiene varios objetos, entre los que se incluyen los siguientes:

  • Un objeto Mesh primitivo que representa un barco.

  • Un objeto 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;
}

Compilar el código

Este ejemplo requiere el código de ejemplo completo que figura en Cómo: Transformar objetos de Direct3D.

Vea también

Conceptos

.Temas "Cómo..." de .NET Compact Framework

Otros recursos

Programar Mobile Direct3D en .NET Compact Framework