ПРОГРАМИРУЕМ 3D ГРАФИКУ ИСПОЛЬЗУЯ DirectX



Расставляем декорации - часть 7


Настройка размеров окна

На моем компьютере установлено разрешение экрана 1280х 1024. Microsoft Windows обладает одной скверной привычкой — по умолчанию она создает громадное окно лишь потому, что у меня установлено большое разрешение экрана. При работе с приложениями, для которых такое большое окно не требуется, я обычно устанавливаю исходный размер окна, включая пару лишних строк в CMainFrame::PreCreateWindow. В приведенном ниже фрагменте задается начальный размер окна 300х350 пикселей:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {

// Задать исходный размер окна

cs.cx = 300;

cs.су = 350;

return CFrameWnd::PreCreateWindow(cs);

ЧЁЙЙ-Й*

Модификация главного окна "тЩЦ: 39

Функция NewScene

Настало время поближе познакомиться с функцией NewScene, о которой было сказано выше:

BOOL CMainFraitie : : NewScene ()

{

// Удалить макет, если он существует if (m pScene) {

m_wnd3d.SetScene(NULL) ;

delete m_pScene;

m_pScene = NULL;

}

// Создать исходный макет m_pScene = new CSdScene;

if (!m_pScene->Create()) return FALSE;

// Установить источники света C3dDirLight dl;

dl.Create(0.8, 0.8, 0.8);

m_pScene->AddChild(&dl) ;

dl.SetPosition(-2, 2, -5);

dl.SetDirectionfl, -1, 1);

m_pScene->SetAmbientLight(0.4, 0.4, 0.4);

m wnd3d.SetScene(m pScene);

return TRUE;

t

Мы включим функцию NewScene в файл MamFrm.cpp. Она удаляет существующий макет и создает новый, со стандартным расположением источников света. Затем макет присоединяется к сцене, которая является частью трехмерного окна. Экспериментируя с трехмерными объектами, я хочу быть уверенным в том, что они уничтожаются и создаются без всяких проблем. Данная функция позволяет удалить все созданные ранее объекты и заново начать работу со макетом (она принесла большую пользу, когда мой малолетний сын схватил джойстик и загнал все объекты куда-то за пределы экрана).

Пересчет размеров трехмерного окна

Так как AppWizard создал панель инструментов и строку состояния, занимающие место в клиентной области окна, нам необходимо иметь возможность заново вычислить размеры трехмерного окна в том случае, если пользователь перемещает или убирает панель инструментов или же скрывает строку состояния. Воспользуйтесь ClassWizard и создайте функцию CMainFrame::RecalcLayout, которая переопределяет функцию CFrameWnd::RecalcLayout:




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