Загрузка...
 
Печать

DirectX Graphics. Работаем с вьюпортами (Working with Viewports)

В игре вьюпорты выглядят как минимониторы, отображающие сцену с другого ракурса (= виртуальной камеры).1 Самый простой пример вьюпорта - зеркало заднего вида (в салоне или на дверях) автомобиля в гоночном симуляторе/аркаде. Основной вьюпорт, как правило, развёрнут на весь экран. Поддержка вьюпортов позволяет моментально изменять размеры "обзора" текущей камеры.

Вьюпорты в DirectX 8 (Win32)

Для создания вьюпорта сперва заполняем структуру D3DVIEWPORT8, прописывая в ней координаты и размеры нового вьюпорта. Вот её шаблон:

typedef struct _D3DVIEWPORT8
{
 DWORD X;  // Крайняя левая X-координата вьюпорта.
 DWORD Y;  // Крайняя верхняя Y-координата вьюпорта.
 DWORD Width;  // Ширина вьюпорта.
 DWORD Height;  // Высота вьюпорта.
 float MinZ;  // 0.0
 float MaxZ;  // 1.0
}D3DVIEWPORT8;

Сразу после заполнения, командуем Direct3D использовать новый вьюпорт в качестве текущего:

...
// pD3DDevice - предварительно созданный и проинициализированный объект устройства Direct3D.

// Создаём вьюпорт.
D3DVIEWPORT8 d3dvp = {0.0, 100, 100, 0.0f, 1.0f};

// Назначаем новый вьюпорт объекту устройства Direct3D.
pD3DDevice->SetViewport(&d3dvp);
...

С этого момента (после вызова функции ID3DDevice8::SetViewport) вся графика данного объекта устройства будет рендерится только в этот вьюпорт.
После назначения нового вьюпорта, необходимо восстановить старый. Для получения настроек старого вьюпорта и их последующего восстановления вызываем функцию ID3DDevice8::GetViewport:

...
// pD3DDevice - предварительно созданный и проинициализированный объект устройства Direct3D.
D3DVIEWPORT8 OldViewport;

// Получаем настройки старого (old) вьюпорта.
pD3DDevice->GetDevice(&OldViewport);

//  ...Сменяем настройки вьюпорта (при необходимости).

// Восстанавливаем старый вьюпорт.
pD3DDevice->SetDevice(&OldViewport);
...

Источники:


1. Jim Adams. Programming Role Playing Games with DirectX 8.0. - Premier Press. 2002

Contributors to this page: slymentat .
Последнее изменение страницы Воскресенье 13 / Декабрь, 2020 11:44:39 MSK автор slymentat.

Помочь проекту

Яндекс-деньги: 410011791055108