Программирование графики с использованием Direct3D



         

Создание порта просмотра


Третий и последний этап, реализуемый функцией CreateScene() — создание порта просмотра. Выполняющий эти действия код выглядит следующим образом:

d3drm->CreateFrame(scene, &camera); camera->SetPosition(scene, D3DVALUE(0), D3DVALUE(0), D3DVALUE(-50)); d3drm->CreateViewport(device, camera, 0, 0, device->GetWidth(), device->GetHeight(), &viewport);

Перед созданием порта просмотра необходимо создать фрейм, который будет использоваться для задания местоположения и ориентации порта просмотра. Вызов функции CreateFrame() интерфейса Direct3DRM инициализирует указатель camera. Вспомните, что указатель camera предоставляется классом RMWin поэтому в функции CreateScene() он не объявляется.

Местоположение фрейма camera задается посредством функции SetPosition(). Местоположение и ориентация фрейма камеры определяют точку с которой будет просматриваться сцена. Вспомните, что при создании сетки и ее привязке к фрейму мы не изменяли местоположение фрейма. Это значит, что сетка отображается в начале координат <0, 0, 0>. Если мы хотим увидеть эту сетку в созданной области просмотра необходимо сместить фрейм камеры от начала координат. Мы используем функцию SetPosition() чтобы разместить фрейм камеры на 50 единиц дальше начала координат.

Область просмотра создается функцией CreateViewport(). Первый аргумент — device был создан функцией CreateDevice(). Второй аргумент — это только что созданный фрейм camera. Следующие четыре аргумента определяют местоположение и размеры области просмотра. Местоположение области просмотра — 0, 0, (верхний левый угол устройства) а размеры совпадают с размерами устройства (вспомните, что при создании устройства мы использовали размеры клиентской области окна). Последний аргумент представляет собой адрес указателя на новую область просмотра, который будет инициализирован по завершении функции.

В конце функция CreateScene() возвращает TRUE что указывает классу RMWin на успешное создание сцены.




Содержание  Назад  Вперед