Установить экранный режим для окна
Окна, ракурсы и устройства
49
BOOL C3dWnd::CreateStage()
// Инициализировать объект DirectDraw if (!m_pDD) {
m pDD = new CDirectDraw;
} if (!m_pDD->Create()) return FALSE;
// Установить экранный режим для окна if ( !m_pDD->SetWindowedMode (GetSafeHwnd () ,
m_iWidth,
m_iHeight)) { return FALSE;
}
// Создать объект Direct3D if (!m_pD3D) {
m_pD3D = new CDirect3D;
} if (!m_pD3D->Create(m_pDD)) return FALSE;
// Задать цветовую модель if (!m_pD3D->SetMode(m_ColorModel)) return FALSE;
// Создать сцену if (!m_pStage) {
m_pStage = new C3dStage;
} if (!m_pStage->Create(m_pD3D)) return FALSE;
// Присоединить текущий макет m pStage->SetScene(m_pScene);
return TRUE;
}
Первая половина функции C3dWnd::CreateStage посвящена созданию объектов DirectDraw и Direct3D, предоставляющих основу для рисования трехмерных объектов в окне. Затем мы выбираем оконный режим для объекта DirectDraw (в отличие от полноэкранного режима) и задаем монохромную цветовую модель MONO для объекта Direct3D (цветовые модели рассматриваются в главе 10). Несколько последних строк создают объект C3dStage по объекту DirectDraw и присоединяют текущий макет к сцене. В свою очередь, объект-сцена C3dStage содержит объекты C3dDevice (устройство) и C3dViewport (ракурс), которые отвечают за взаимодействие с компонентами DirectDraw и Direct3D. Кроме того, сцена содержит объект C3dCamera; мы рассмотрим его ниже. Функция, в которой происходит фактическое создание сцены по объекту Direct3D, выглядит следующим образом:
50 ВД!8' Глава 2. Расставляем декорации
BOOL C3dStage::Create(CDirect3D* pD3D)
{
// Удалить существующий макет SetScene(NULL) ;
// Создать новое устройство по поверхностям Direct3D if (!m_Device.Create(pD3D)) return FALSE;
// Задать качество m Device.SetQuality(m_Quality);
// Создать ракурс if (!m_Viewport.Create(&m_Device,
&m Camera,
0,~0,
m_Device.GetWidth(),
m_Device.GetHeight())) ( return FALSE;
}
return TRUE;
Как видите, приведенная выше функция сводится к построению объектов C3dDevice и CSdViewport. Чтобы создать устройство, мы вызываем соответствующую функцию Direct3D и передаем ей указатель на используемые компоненты DirectDraw:
Содержание Назад Вперед