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




Глава 4


    Глава 4. Код
    Программа Sample Зависимости COM-интерфейсов Разработка классов C++ Инициализация Direct3D Конструирование сцен Управление сценой Завершение работы Direct3D Вспомогательные функции Пришло время пр...
    Мастер Direct3D AppWizard
    В главе1 вы познакомились с мастером Direct3D AppWizard. Напомню, Direct3D AppWizard это нестандартный инструмент Visual C++, позволяющий создавать завершенные приложения Direct3D. Мастер AppWizar...
    Программа Sample
    Мы используем мастер Direct3D AppWizard для создания проекта, который назовем Sample . В главе1 был приведен краткий обзор действий, необходимых для создания нового проекта, так что здесь мы повто...
    Зависимости COM-интерфейсов Direct3D
    В главе3 обсуждались COM-интерфейсы Direct3D и обеспечиваемая ими функциональность. Во время обсуждения вы узнали, что некоторые интерфейсы должны создаваться раньше, а другие позже. Интерфейсы до...
    Дерево зависимостей
    Простейший способ анализа зависимостей построение дерева зависимостей . Дерево зависимостей изображает связи каждого интерфейса с другими, представляя каждый интерфейс как узел дерева. Корень дере...
    Создание собственного дерева зависимостей
    Показанное на рис.4.2 дерево зависимостей может быть разделено на две части. Узлы вблизи корня представляют интерфейсы, присутствующие во всех приложениях Direct3D, а остальные узлы представляют и...
    Последовательность событий
    Дерево зависимостей определяет порядок создания интерфейсов. Например, объект Direct3DRM располагается на вершине дерева, поэтому все остальные объекты зависят от его существования. Это значит, чт...
    Разработка классов
    Давайте отвлечемся от COM-интерфейсов Direct3D и поговорим о классах C++. Мы будем применять классы C++ для управления сложностью программ. Эти классы не являются заменой интерфейсов Direct3D. Кла...
    Разделение труда
    Прежде чем перейти к детальному обсуждению используемых функций, разделим их на четыре категории. Каждая категория соответствует стадии, или фазе, выполнения программы. Инициализация Direct3D. Соз...
    Инициализация Direct3D
    Ранее в этой главе мы определили порядок, в котором должны создаваться интерфейсы Direct3D. Рис.4.4 иллюстрирует необходимый порядок действий, а также показывает, какие этапы являются стандартными...
    Функция InitInstance()
    Функция InitInstance() это виртуальная функция класса CWinApp, переопределяемая для выполнения инициализации. Собственные версии функции InitInstance() предоставляют и класс RMApp и класс SampleAp...
    Функция OnCreate()
    Функция OnCreate() наследуется классом RMWin от класса CWnd. Она вызывается в процессе создания окна (после того, как окно создано, но до его вывода на экран) и является удобным местом для инициал...
    Функция CreateDevice()
    Функция CreateDevice() отвечает за создание стандартных интерфейсов Direct3D, наиболее важным из которых является интерфейс Direct3DRMDevice. Функция CreateDevice() является закрытой, поэтому клас...
    Функция GetGUID()
    Функция GetGUID() применяется для получения GUID (глобального уникального идентификатора) идентифицирующего создаваемое функцией CreateDeviceFromClipper() устройство. Если вместо вызова функции Ge...
    Конструирование сцен
    К этому моменту мы инициализировали стандартные интерфейсы Direct3D. Все обсужденные ранее этапы выполнялись классами RMApp и RMWin. Теперь настало время создать сцену....
    Функция CreateScene()
    Рассматривая функцию CreateDevice(), мы узнали, что в конце она вызывает функцию CreateScene(). Функция CreateScene() класса RMWin объявлена как чисто виртуальная. Это значит, что классы, производ...
    Создание сетки
    Первый этап требует создания указателя на интерфейс Direct3DRMMeshBuilder. Функция Load() интерфейса Direct3DRMMeshBuilder применяется для загрузки сетки из файла. Если вызов функции Load() заверш...
    Создание источника света
    Второе действие, выполняемое функцией CreateScene(), создание источника зонального света: LPDIRECT3DRMLIGHT slight; d3drm-CreateLightRGB(D3DRMLIGHT_SPOT, D3DVALUE(1.00), D3DVALUE(1.00), D3DVALUE(1...
    Создание порта просмотра
    Третий и последний этап, реализуемый функцией CreateScene() создание порта просмотра. Выполняющий эти действия код выглядит следующим образом: d3drm-CreateFrame(scene, camera); camera-SetPosition(...
    Управление сценой
    До сих пор мы обсуждали инициализацию Direct3D и создание сцены в нашей программе. Теперь мы обратим внимание на то, что происходит во время выполнения программы....
    Функция OnIdle()
    Интерфейс Direct3DRM предоставляет функцию Tick() применяемую, чтобы сообщить Direct3D о необходимости обновить все объекты сцены, выполнить визуализацию и вывести на экран полученный результат. В...
    Функция OnActivate()
    Direct3D неплохая подсистема, делающая то, о чем вы ее просите. Однако, она требует выполнения некоторых условий. Одно из них заключается в следующем вы должны уведомлять ее всякий раз, когда ваше...
    Функция OnPaint()
    Direct3D также ожидает уведомления когда ваше приложение получает сообщение WM_PAINT. Для этой цели интерфейс Direct3DRMWinDevice предоставляет функцию HandlePaint(), благодаря чему функция OnPain...
    Функция OnSize()
    Функция OnSize() вызывается MFC при получении сообщения WM_SIZE. Это сообщение уведомляет о том, что пользователь изменил размеры окна. Класс RMWin предоставляет функцию OnSize() для изменения пар...
    Функция OnEraseBkgnd()
    Direct3D позволяет задать цвет фона с помощью функции SetSceneBackground() интерфейса Direct3DRMFrame, но при изменении размеров окна Windows стирает содержимое клиентской области не учитывая цвет...
    Использование функций обратного вызова
    В начале этой главы, создавая с помощью мастера Direct3D AppWizard приложение Sample, мы указали, что хотим использовать анимированный зональный источник света. Мастер AppWizard добавил в проект к...
    Завершение работы
    Инициализация Direct3D, создание сцен, и выполнение анимации в реальном времени настолько увлекательны, что не хочется останавливать программу, однако рано или поздно это придется сделать....
    Функция OnDestroy()
    Перед завершением работы приложения MFC вызывается функция OnDestroy(). Это хорошее место для освобождения созданных нами указателей. Класс RMWin предоставляет версию функции OnDestroy(), которая...
    Вспомогательные функции
    Некоторые из упомянутых нами ранее функций не относятся к функциям Win32, MFC или Direct3D. Это вспомогательные функции, предоставляемые классом RMWin. Теперь мы рассмотрим эти функции подробнее....
    Функция ScaleMesh()
    В функции CreateScene() после создания и загрузки объекта meshbuilder вызывается функция ScaleMesh(), гарантирующая, что сетка будет иметь требуемый размер. Ниже снова приведен соответствующий фра...
    Функция GetMouse()
    Мышь это неотъемлемая часть интерфейса Windows и пользователи ожидают, что программа будет поддерживать работу с мышью так же, как она поддерживает работу с клавиатурой. Функции GetMouseX() и GetM...
    Преобразования типов COLORREF и D3DCOLOR
    Для представления цветов Windows использует значения типа COLORREF. В Direct3D для той же цели применяется тип D3DCOLOR. Эти два типа несовместимы, и поэтому класс RMWin предоставляет функции прео...
    Обучайтесь экспериментируя
    Ничто так не способствует изучению материала, как свободное экспериментирование. Одна из замечательных особенностей разрабоки программного обеспечения заключается в том, что экспериментирование яв...









Начало