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




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


int CMainFrame::OnCreate(LPCREATESTRUCT IpCreateStruct) (

// Создать трехмерное окно if (!m_wnd3d.Create(this, IDC_3DWND)) ( return -1;

}

NewScene () ;

ASSERT(m_pScene) ;

// Создать трехмерный объект C3dShape shi;

shi.CreateCube(2) ;

m_pScene->AddChild(&shl) ;

shl.SetRotation(l, 1, 1, 0.02);

return 0;

}

Этот фрагмент во многом напоминает тот, который использовался в программе Basic для отображения исходного макета. Обратите внимание на то, что константа IDC_3DWND включается в проект командой View] Resource Symbols в меню Visual C++. Класс CMainFrame пополнился двумя членами: m_wnd3d и m_pScene. Переменная m_wnd3d была включена нами в MainFrm.h ранее, после редактирования функции CStageApp::lnitlnstance (стр. 35). Переменная m_pScene добавляется следующим образом:

38 ¦¦У Глава 2. Расставляем декорации

class CMainFrame : public CFrameWnd

public:

C3dWnd m_wnd3d;

CSdScene* m_pScene;

};

ПРИМЕЧАНИЕ

Блюстители чистоты C++ могут неодобрительно отнестись к тому, что объекты окна и макета были объявлены мной как открытые. Тем не менее я часто поступаю так в своих примерах, чтобы не возиться со специальными функциями доступа (например, GetScene). Прямой доступ к объектам позволяет получить более компактный код, даже если при этом нарушается принцип инкапсуляции.

Теперь в нашем главном окне содержится трехмерное окно и указатель на текущий макет. Возвращаясь к функции OnCreate на предыдущей странице, проследим за последовательностью действий: сначала мы создаем трехмерное окно, затем при помощи функции NewScene строим трехмерный макет (работа этой функции будет рассмотрена ниже), после чего мы создаем куб, присоединяем его к макету и начинаем вращать. Если взглянуть на текст функции C3dWnd::Create в библиотеке 3dPlus, нетрудно увидеть, что она создает трехмерное окно в качестве окна-потомка, а передаваемый при ее вызове указатель this (см. предыдущую страницу) используется для определения окна-родителя. Конечно, достижением программистской мысли это не назовешь, и все же данный факт достаточно важен для понимания основ.




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