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




Глава 9


    Глава 9. Порты просмотра
    Параметры поля зрения Выбор объектов Работа с несколькими портами просмотра Большинство демонстрационных программ на CD-ROM требуют создания порта просмотра, поэтому с предметом изучения вы уже зн...
    Поле зрения
    Во всех демонстрационных программах, которые мы рассмотрели в предыдущих главах, мы не задавали параметры поля зрения или угол обзора камеры. Это означает, что мы использовали устанавливаемое по у...
    Приложение Zoom
    В фотографии линза, используемая для изменения поля зрения, называется трансфокатором. Трансфокаторы позволяют получить крупный план удаленных объектов и общий план для просмотра больших пейзажей....
    Класс ZoomWin
    Функциональные возможности приложения Zoom сосредоточены в классе ZoomWin: class ZoomWin : public RMWin { public: ZoomWin(); BOOL CreateScene(); protected: //{{AFX_MSG(ZoomWin) afx_msg void OnRend...
    Функция ZoomWin::CreateScene()
    Сцена в приложении Zoom создается функцией CreateScene(), код которой приведен в листинге9.1. Листинг 9.1. Функция ZoomWin::CreateScene() BOOL ZoomWin::CreateScene() { // ------- СЕТКА -------- D3...
    Функция ZoomWin::AdjustField()
    Функция AdjustField() является функцией обратного вызова, которая управляет полем зрения порта просмотра. Код этой функции выглядит так: void ZoomWin::AdjustField(LPDIRECT3DRMFRAME, void*, D3DVALU...
    Функции меню Animation в классе ZoomWin
    Приложение Zoom позволяет во время работы выбирать тип анимационной последовательности (линейная или сплайновая) с помощью меню Animation . Для этого вызывается функция SetOptions() интерфейса Dir...
    Выбор объектов
    Порты просмотра Direct3D предоставляют поддержку выбора объектов ( picking ). Выбор объекта это указание интересующего объекта путем указания его местоположения в порте просмотра. Обычно для указа...
    Приложение MeshPick
    Приложение MeshPick отображает девять сферических сеток и позволяет использовать мышь для их выбора и перетаскивания. Сетки могут быть размещены одна поверх другой, что позволяет проверить точност...
    Класс MeshPickWin
    Функциональность приложения MeshPick предоставляется классом MeshPickWin: class MeshPickWin : public RMWin { public: MeshPickWin(); BOOL CreateScene(); protected: //{{AFX_MSG(MeshPickWin) afx_msg...
    Функция MeshPickWin::CreateScene()
    Функция CreateScene() приложения MeshPick привелена в листинге9.2. Листинг 9.2. Функция MeshPickWin::CreateScene() BOOL MeshPickWin::CreateScene() { // ------- КОНСТРУКТОР СЕТОК -------- D3DRMLOAD...
    Функции класса MeshPickWin для работы с мышью
    Приложение MeshPick использует две функции обработки сообщений, чтобы реагировать на изменение состояния кнопок мыши. Функция OnLButtonDown() вызывается MFC каждый раз, когда пользователь нажимает...
    Функция MeshPickWin::PickMesh()
    Как мы отмечали при рассмотрении функции OnLButtonDown(), функция PickMesh() используется для проверки наличия объекта в указанной точке: BOOL MeshPickWin::PickMesh(const CPoint point) { HRESULT r...
    Функция MeshPickWin::UpdateDrag()
    Функция UpdateDrag() это функция обратного вызова, устанавливаемая в функции CreateScene(). Она используется для опроса состояния приложения и перемещения сеток, когда существует начатая операция...
    Выбор граней
    Теперь мы знаем, как можно использовать порт просмотра для выбора сеток. Но что делать, если мы хотим выбирать отдельные грани сетки? Никаких проблем. Фактически, необходимый для этого код будет о...
    Приложение FacePick
    Приложение FacePick отображает на экране сетку и позволяет выбирать отдельные ее грани. Выбранная грани меняет свой цвет на тот, который указан в меню Colors . Сетку можно поворачивать, выбрав люб...
    Класс FacePickWin
    В классе FacePickWin сосредоточена основная функциональность приложения FacePick: class FacePickWin : public RMWin { public: FacePickWin(); BOOL CreateScene(); protected: //{{AFX_MSG(FacePickWin)...
    Функция FacePickWin::CreateScene()
    Сцена приложения FacePick конструируется в функции FacePickWin::CreateScene(), код которой показан в листинге9.3. Листинг 9.3. Функция FacePickWin::CreateScene() BOOL FacePickWin::CreateScene() {...
    Функции класса FacePickWin для работы с мышью
    В приложении FacePick мышь используется не только для выбора граней, но и для вращения сетки и изменения ее ориентации. Для отслеживания состояния левой кнопки мыши класс FacePickWin использует фу...
    Функция FacePickWin::PickFace()
    Функция PickFace() использует функцию Pick() интерфейса Direct3DRMViewport для выполнения операции выбора. Если в результате выполнения операции выбора был возвращен объект, функция вернет индекс...
    Функция FacePickWin::UpdateDrag()
    Функция UpdateDrag() является функцией обратного вызова, устанавливаемой в функции CreateScene(). Функция UpdateDrag() отвечает за вычисление новых атрибутов вращения сетки во время операции перет...
    Функции меню Color в классе FacePickWin
    Приложение FacePick поддерживает два диалоговых окна для выбора цвета. Этими диалоговыми окнами управляют функции OnColorsFace() и OnColorsMesh(). Функция OnColorsFace() предоставляет пользователю...
    Функции меню File в классе FacePickWin
    Приложение FacePick позволяет загружать и сохранять сетки с помощью меню File . Для этих целей в класс FacePickWin включены функции OnFileOpen() и OnFileSave(). Функция OnFileOpen() выглядит следу...
    Использование нескольких портов просмотра
    Во всех приложениях, рассмотренных нами до этого момента, для отображения сцены использовался единственный порт просмотра. Для большинства приложений это замечательно работает, но в некоторых случ...
    Приложение MultiView
    Приложение MultiView отображает единственную вращающуюся сетку, но для ее показа используются три порта просмотра. Приложение предоставляет меню, позволяющее настроить или отключить любой из порто...
    Код приложения MultiView
    Приложение MultiView написано слегка иначе, чем остальные демонстрационные программы на CD-ROM. Все примеры для своего класса приложения в качестве базового класса используют класс RMWin. Большинс...
    Класс MultiViewWin
    Основная (но не вся) функциональность приложения MultiView предоставляется классом MultiViewWin: class MultiViewWin : public RMWin { public: MultiViewWin(); BOOL CreateScene(); protected: //{{AFX_...
    Функция MultiViewWin::CreateScene()
    Сцена для приложения MultiView конструируется в функции CreateScene(), код которой приведен в листинге9.4. Листинг 9.4. Функция MultiViewWin::CreateScene() BOOL MultiViewWin::CreateScene() { // --...
    Изменения в классе RMWin
    Определение версии класса RMWin, используемой в приложении MultiView, приведено в листинге9.5. Листинг 9.5. Определение класса RMWin class RMWin : public CFrameWnd { public: RMWin(); RMWin(int w,i...
    Функция RMWin::CreateDevice()
    Изменения, внесенные в класс RMWin, не ограничиваются добавлением новых переменных и функций. Кроме того, был изменен ряд функций, одна из которых CreateDevice(). Функция CreateDevice() отвечает з...
    Функция RMWin::ConfigViewport()
    Функция ConfigViewport() получает два аргумента: указатель на интерфейс Direct3DRMFrame и целое число, указывающее желаемую позицию фрейма. Код функции выглядит так: void RMWin::ConfigViewport(LPD...
    функция RMWin::CreateViewports()
    Функция CreateViewports() создает три используемых в приложении порта просмотра: void RMWin::CreateViewports() { int newwidth = device-GetWidth(); int newheight = device-7gt;GetHeight(); int oneth...
    Функция RMWin::Render()
    Мы завершили обсуждение кода, который создает и конфигурирует сцену приложения и внутренние компоненты. Теперь посмотрим, что происходит после инициализации. Важным действием является обновление с...
    Функция RMWin::OnSize()
    Функция OnSize() вызывается при изменении размеров окна. Это важно, поскольку размер устройства Direct3D не может быть изменен. Следовательно, в случае изменения размеров окна функция OnSize() дол...
    Функции меню Viewport в классе RMWin
    Приложение MultiView предоставляет команды меню, позволяющие настраивать любой из портов просмотра. Для каждого из портов просмотра предусмотрено отдельное меню. Здесь мы обсудим обработчики сообщ...
    Заключение
    Вполне возможно, что написанные вами приложения будут использовать порты просмотра Direct3D исключительно для отображения сцен. Тем не менее, если вам потребуется реализовать такие операции с порт...









Начало        




Книжный магазин