Поделиться через


Практическое руководство. Перемещение и наведение камеры

Обновлен: Ноябрь 2007

Перемещать и наводить камеру в сцене Direct3D можно при помощи преобразований представления.

Bb397833.alert_note(ru-ru,VS.90).gifПримечание.

Управляемым мобильным приложениям Direct3D требуется программное обеспечение Windows Mobile версии 5.0 для карманных ПК и смартфонов. Дополнительные сведения о программном обеспечении Windows Mobile и пакетах SDK см. в разделе Внешние ресурсы для платформы .NET Compact Framework.

Преобразования представления переводят объекты Direct3D из мировой системы координат в систему координат экрана. При выполнении преобразования представления сведения о положении камеры (или зрителя), целевом объекте наведения камеры и системе координат позволяют управлять результатом на экране и гарантируют, что координаты мировой системы координат правильно преобразуются в координаты пространства экрана.

Мировая система координат основана на левосторонней системе координат, в которой значения по оси Y увеличиваются снизу вверх, значения по оси X увеличиваются слева направо, а значения по оси Z увеличиваются по направлению от гипотетического зрителя. Наоборот, в правосторонней системе координат положительные значения оси Z увеличиваются по направлению к зрителю.

Свойство Transform устройства возвращает структуру Matrix, которая описывает состояние преобразования. Чтобы переместить и навести камеру, передайте матрицу преобразования представления объекту устройства при помощи метода LookAtLH для обработки преобразования.

В следующем примере камера вначале находится за сценой, имея положительную координату на оси Z, и наводится на точку вблизи начала координат. Поскольку камера находится за сценой, объекты с положительными значениями координат по оси Z будут расположены ближе к камере, а не дальше от нее. Кроме того, объекты с положительными значениями координат по оси X будут находиться слева, а не справа.

Пример

В следующем примере кода показано преобразование представления для приложения, которое анимирует простую ограниченную сетку, изображающую корабль. Полный пример кода см. в разделе Пошаговое руководство. Преобразование объектов Direct3D.

В этом примере кода содержится несколько объектов, включая следующие:

  • Примитивный объект Mesh, представляющий корабль.

  • Объект 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;
}

Компиляция кода

Для этого примера требуется полный пример кода из раздела Пошаговое руководство. Преобразование объектов Direct3D.

См. также

Основные понятия

Разделы руководства по платформе .NET Compact Framework

Другие ресурсы

Мобильное программирование Direct3D в .NET Compact Framework