DirectX 8 Graphics. Вьюпорты (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. Adams J. Programming Role Playing Games with DirectX 8.0. - Premier Press. 2002
Последние изменения страницы Пятница 13 / Май, 2022 12:08:59 MSK
Последние комментарии wiki