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




Глава 3


    Глава 3. Знакомство с Direct3D
    Модель программирования COM от Microsoft Объекты Direct3D Основные типы данных Direct3D X-файлы В этой главе мы обратим внимание на Direct3D, поговорим об используемых концепциях и терминологии и...
    Direct3D
    Direct3D это набор интерфейсов модели компонентных объектов Microsoft (Microsoft Component Object Model, COM) представляющих графические конструкции, такие как сетки и грани, и прикладные конструк...
    COM
    Microsoft COM (Component Object Model) это программная модель разработанная с целью позволить создание полностью переносимых компонентов, допускающих безопасное обновление. С точки зрения COM прог...
    Direct3DRM: основной интерфейс
    Как было упомянуто ранее, Direct3D это набор COM-интерфейсов. Все интерфейсы, составляющие Direct3D, зависят от одного главного: Direct3DRM (RM обозначает Retained Mode абстрактный режим). Объект...
    Создание объектов Direct3D
    Главная цель интерфейса Direct3DRM создание других объектов Direct3D. Большинство функций интерфейса Direct3DRM имеют префикс Create (создание). Функции, создающие объекты, перечислены ниже: Creat...
    Изменение пути поиска файлов
    Другая функция интерфейса Direct3DRM заключается в том, что он позволяет изменить пути поиска, используемые Direct3D для обнаружения файлов. Для получения и изменения пути применяются следующие фу...
    Управление скоростью обновления
    Кроме всего прочего, объект Direct3DRM предоставляет функцию Tick(), которая управляет скоростью выполнения программы. Каждый раз, когда вы вызываете функцию Tick(), Direct3D обновляет анимированн...
    Direct3DRMDevice: интерфейс устройства
    Устройства Direct3D это объекты, которые создают визуализированное изображение. Direct3D поддерживает несколько типов устройств. Программы могут выбрать устройство из списка доступных устройств ил...
    Цветовые модели
    И программные и аппаратные устройства поддерживают две цветовых модели: RGB и Ramp. Цветовая модель RGB поддерживает цветное освещение, а цветовая модель Ramp нет. Благодаря этому устройства Ramp...
    Параметры визуализации
    Устройства могут применяться для изменения параметров визуализации. Например, функции GetQuality() и SetQuality() позволяют задать режим визуализации (Гуро, равномерная закраска ит.д.) используемы...
    Direct3DWinDevice: интерфейс устройства Windows
    Объект, обеспечивающий поддержку устройства Direct3D, является примером COM-объекта, поддерживающего несколько интерфейсов. Мы рассмотрели один интерфейс, через который можно использовать устройст...
    Direct3DRMViewport: интерфейс порта просмотра
    Порт просмотра (viewport) это термин, используемый в Direct3D для камеры. Порт просмотра определяет местоположение зрителя и направление просмотра сцены. Порт просмотра может применяться для настр...
    Поле зрения
    Параметры поля зрения (field-of-view, FOV) могут настраиваться посредством функции SetField(). Значение FOV по умолчанию равно0.5. Меньшие значения сужают угол зрения, подобно длиннофокусному объе...
    Отсечение
    Порт просмотра управляет передней и задней плоскостями отсечения. Для определения области перед камерой, в которой объекты будут видимы, можно использовать функции SetFront() и SetBack(). Объекты,...
    Direct3DRMFrame: интерфейс фрейма
    Фреймы (frame) являются важной частью абстрактного режима Direct3D. Использование этого термина может привести к путанице, поскольку общепринятое его значение кадр анимации. В Direct3D значение эт...
    Иерархия фреймов
    Сцена Direct3D определяется как иерархия фреймов. Каждая сцена содержит корневой фрейм и произвольное число дочерних фреймов, присоединенных к корневому. Каждый дочерний фрейм может в свою очередь...
    Позиционирование фреймов
    Интерфейс Direct3DRMFrame предоставляет ряд функций, используемых для позиционирования фреймов. К их числу относятся: AddRotation() AddScale() AddTranslation() GetOrientation() GetPosition() LookA...
    Перемещение фреймов
    Интерфейс фрейма предоставляет функции для пошаговой корректировки позиции фрейма. Эти функции задают атрибуты движения, которые будут применяться к фрейму при каждом обновлении сцены. Функции Get...
    Перемещение и функции обратного вызова
    Возможность размещать фреймы и назначать атрибуты движения очень важна, но ее недостаточно. Интерактивная графика требует, чтобы объекты в сцене могли взаимодействовать друг с другом и реагировать...
    Direct3DRMMeshBuilder: интерфейс конструктора сеток
    Интерфейс Direct3DRMMeshBuilder это высокоуровневый, удобный инструмент для манипуляций с сетками, предоставляющий 38 функций для создания и модификации сеток. Конструктор сеток, как следует из ег...
    Загрузка и сохранение
    Функция Load() позволяет объектам конструктора сеток загружать сетки с диска, из ресурсов программы либо из памяти. Кроме того, функция Load() загружает любые назначенные сетке текстуры, если мест...
    Параметры визуализации
    Конструктор сеток позволяет манипулировать различными прааметрами отображения сеток, такими как цвет, текстуры и режим визуализации. Для этого используются следующие функции: GetPerspective() GetQ...
    Доступ к граням
    Интерфейс конструктора сеток позволяет также модифицировать и добавлять грани. Например, список созданных конструктором сеток граней может быть получен с помощью функции GetFaces(). Для получения...
    Доступ к вершинам
    Конструктор сеток обеспечивает доступ к вершинам сетки. Число вершин сетки может быть получено с помощью функции GetVertexCount(). Данные вершин могут быть получены или установлены посредством фун...
    Перемещение и масштабирование
    Местоположение объектов определяется фреймами, но можно определить расположение сетки относительно присоединенного фрейма. Функция конструктора сеток Translate() позволяет задать смещение местопол...
    Производительность
    Благодаря предоставляемым мощности и простоте использования интерфейса Direct3DRMMeshBuilder, конструкторы сеток являются оптимальным выбором для большинства задач. Однако в некоторых ситуациях пр...
    Direct3DRMMesh: интерфейс сетки
    Интерфейс Direct3DRMMesh разработан для более быстрой работы с сетками. К сожалению, интерфейс сетки не так прост в использовании, как интерфейс конструктора сеток. Сетки могут быть созданы при по...
    Группы граней в сетке
    Интерфейс сетки практически целиком предназначен для манипуляций с группами. Группа это набор граней внутри сетки, которые могут быть обработаны как единая сущность. Для создания и модификации гру...
    Доступ к вершинам
    Для работы с позициями вершин интерфейс Direct3DRMMesh предоставляет функции GetVertices() и SetVertices(). Функция GetVertices() предназначена для получения текущей позиции вершины. После получен...
    Создание сеток посредством конструктора сеток
    Для создания экземпляра интерфейса Direct3DRMMesh может применяться конструктор сеток. Обычно конструктор сеток используется для загрузки сетки с диска, назначения цветов и текстур, настройки гран...
    Direct3DRMFace: интерфейс грани
    Сетки представляют собой набор граней, следовательно, создание сеток означает создание граней. В большинстве случаев вы будете модифицировать существующие грани, а не создавать новые. Например, ин...
    Текстуры граней
    Для присоединения текстур к граням используются следующие функции интерфейса Direct3DRMFace: GetTexture() GetTextureCoordinateIndex() GetTextureCoordinates() GetTextureTopology() SetTexture() SetT...
    Материалы грани
    Внешний вид грани (блестящая, матовая ит.д.) может быть изменен с помощью функций GetMaterial() и SetMaterial(). Мы поговорим о материалах подробнее в разделе, посвященном интерфейсу Direct3DRMMat...
    Вершины грани
    Параметрами вершин можно манипулировать с помощью следующих функций интерфейса Direct3DRMFace: AddVertex() GetVertex() GetVertexCount() GetVertexIndex() GetVertices() Возможность добавления вершин...
    Direct3DRMTexture: интерфейс текстуры
    В Direct3D текстуры могут быть назначены для грани и сетки, либо добавлены непосредственно к сцене, как фоновое изображение или декал (decal). Текстуры могут быть загружены из файлов BMP, файлов P...
    Создание текстур
    Простейший способ создания текстуры использование функции LoadTexture() интерфейса Direct3DRM: LPDIRECT3DRM texture; d3drm-LoadTexture(texture.bmp, texture); Функция LoadTexture() получает в качес...
    Цвета текстуры
    После создания экземпляра интерфейса Direct3DRMTexture можно вызывать функции GetColors() и SetColors() для управления количеством цветов, используемых Direct3D для представления текстуры. Посредс...
    Декалы
    Декал (decal) это текстура, добавляемая к сцене без присоединения к грани или сетке. Декалы визуализируются в сцене в соответствии с их местоположением, благодаря чему они увеличиваются или уменьш...
    Direct3DRMTextureWrap: интерфейс наложения текстур
    Наложение текстуры это объект, определяющий способ присоединения текстуры к сетке. Наложение текстуры контролирует стиль наложения (плоский, цилиндрический, сферический), ориентацию и параметры те...
    Direct3DRMMaterial: интерфейс материала
    Материал определяет поведение света, попадающего на грани и сетки. Объект может быть сделан блестящим, матовым и, кроме того, задание свойств материала позволяет имитировать светящиеся объекты. Эк...
    Мощность отраженного света
    Отраженный свет (specular light) это свет, который отражается от объекта и создает блики (солнечные зайчики). Параметры бликов влияют на вид объекта. Небольшие, яркие блики заставляют объект казат...
    Цвет отраженного света
    Вы можете настраивать цвет отраженного света с помощью функций GetSpecular() и SetSpecular(). По умолчанию цвет отраженного света белый....
    Цвет испускаемого света
    Испускаемый свет (emissive light) это свет, исходящий от самого объекта. Испускаемый свет применяется при представлении таких источников освещения, как лампы и неоновые трубки. По умолчанию объект...
    Direct3DRMLight: интерфейс источника света
    Direct3D поддерживает пять различных типов источников света: рассеянный свет, точечный источник света, направленный свет, параллельный свет и зональное освещение, или прожектор. Единственный общий...
    Рассеяный свет
    Рассеяный свет является самым простым типом источника света, поскольку имеет всего один параметр: цвет. Хотя источник рассеяного света и должен быть перед помещением в сцену присоединен к фрейму,...
    Точечный источник света
    Точечный источник света испускает лучи во всех направлениях, поэтому его ориентация не имееет значения. Местоположение точечного источника света определяет точку, из которой будут испускаться свет...
    Направленный свет
    Направленный источник света является противоположностью точечному. Направленный источник света имеет ориентацию, но не имеет местоположения. Он испускает параллельные световые лучи, в связи с чем...
    Параллельный свет
    Параллельный источник света является вариацией направленного. Параллельный источник света также испускает параллельные световые лучи, но они распространяются не в одном, а в двух противоположных н...
    Зональное освещение
    Зональный источник света, или прожектор (spotlight), испускает свет в форме конуса. При этом используется местоположение фрейма для определения точки испускания света (вершины конуса) и ориентация...
    Direct3DRMShadow: интерфейс тени
    Библиотека Direct3D разрабатывалась для создания быстродействующих приложений. В связи с этим иногда приходится приносить в жертву производительности точность и реализм. Хорошим примером является...
    Direct3DRMAnimation: интерфейс анимации
    В Direct3D термин анимация (animation) имеет два значения. Анимацией называется перемещение объектов в сцене, кроме того, анимация это еще и название интерфейса, который поддерживает создание и во...
    Создание ключей
    Интерфейс Direct3DRMAnimation позволяет конструировать анимационные последовательности на основе ключей (keys). Каждый ключ представляет собой коэффициенты перемещения, вращения или масштабировани...
    Установка времени в анимации
    Для установки текущей позиции в созданной анимации применяется функция SetTime(). Передаваемые функции SetTime() значения зависят от значений, применявшихся при зоздании ключевых кадров. Значения...
    Параметры анимации
    Функции GetOptions() и SetOptions() применяются, чтобы определить поведение анимированных объектов. С их помощью можно задать следующие параметры: линейная или сплайновая анимация; открытая или за...
    Direct3DRMAnimationSet: интерфейс анимационного набора
    Анимационный набор (animation set) это коллекция объектов анимации, используемая для представления анимированной сцены в целом. Обычно анимационные наборы создаются путем импортирования анимирован...
    Загрузка анимационных наборов
    Анимационные наборы загружаются функцией Load() интерфейса Direct3DRMAnimationSet. Имя файла, передаваемое функции Load(), должно указывать на файл, содержащий завершенную анимированную сцену. Под...
    Установка времени в анимационных наборах
    Аналогично интерфейсу Direct3DRMAnimation, интерфейс Direct3DRMAnimationSet предоставляет функцию SetTime(). В случае анимационного набора функция SetTime() устанавливает время для каждой анимации...
    Типы данных Direct3D
    Direct3D определяет несколько типов данных, которые несомненно будут снова и снова применяться в ваших программах. В данном разделе мы обсудим эти типы данных....
    D3DVALUE
    D3DVALUE это основной тип данных в Direct3D. Тип D3DVALUE объявлен через тип float и применяется в Direct3D для представления координат вершин, интенсивности освещения, скорости вращения ит.д. В 3...
    D3DVECTOR
    Структура D3DVECTOR определена следующим образом: typedef struct _D3DVECTOR { union { D3DVALUE x; D3DVALUE dvX; }; union { D3DVALUE y; D3DVALUE dvY; }; union { D3DVALUE z; D3DVALUE dvZ; }; } D3DVE...
    D3DCOLOR
    Тип D3DCOLOR применяется в Direct3D для представления цветов. Цвет имеет красную, зеленую, синюю и альфа составляющие. Значение каждой составляющей может варьироваться от нуля (отсутствие компонен...
    D3DRMBOX
    Direct3D использует структуру D3DRMBOX для описания размеров объекта. Интерфейсы Direct3DRMMesh и Direct3DRMMeshBuilder предоставляют функцию GetBox(), применяемую для получения размеров объекта....
    D3DRMVERTEX
    Структура D3DRMVERTEX применяется в Direct3D для описания вершин сеток и определена следующим образом: typedef struct _D3DRMVERTEX{ D3DVECTOR position; D3DVECTOR normal; D3DVALUE tu, tv; D3DCOLOR...
    D3DRMQUATERNION
    Кватернионы описывают вращение. В главе2 для описания вращения мы применяли вектор и значение вращения. Вектор определял ось вращения, а значение угол поворота. Кватернионы инкапсулируют вектор и...
    HRESULT
    Большинство основных функций DirectX возвращают в качестве кода ошибки значение типа HRESULT. Тип HRESULT представляет собой 32-разрадное значение, индицирующее состояние функции в момент завершен...
    X-файлы
    X-файлы являются родным форматом файлов Direct3D. Х-файлы могут хранить множество сеток, иерархию фреймов и полные анимации. Текстуры не могут храниться в X-файлах. В DirectX2, Direct3D поддержива...
    Conv3ds
    Direct3D предоставляет для создания X-файлов утилиту CONV3DS, преобразующую файлы 3DStudio ( .3DS ) в X-файлы. У утилиты CONV3DS есть ряд параметров командной строки. Наиболее часто применяемые па...
    Заключение
    Теперь, когда вы знаете, что представляют собой интерфейсы Direct3D и что они делают, можно приниматься за более веселое занятие программирование. В главе4 мы обсудим код приложения Direct3D....









Начало        




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