Чтение онлайн

на главную - закладки

Жанры

Введение в Direct3D8

Александров Алексей

Шрифт:

• Поддерживается стандартный конвейер 3D преобразований: матрица окружения (world matrix), матрица моделирования (view matrix) и матрица проектирования (projection matrix).

• Поддержка растеризации различных геометрических примитивов: точек, отрезков, треугольников. Примитивы более высокого уровня тоже имеются, но только при соотвествующей поддержке оборудованием – эмуляция не обеспечивается.

• Очень мощная подсистема освещения: свет и материалы.

• 3D текстурирование. Очень забавная и гибкая вещь, позволяющая делать поистине впечатляющие вещи: можно натянуть любое изображение на любой 3D объект.

• За деталями упомянутого

и всего остального – добро пожаловать в DirectX 8.0a SDK.

С чего начать?

Работа с любой новой средой разработки или библиотекой начинается, как правило, с одного и того же вопроса: "Боже мой! Ну почему оно не компилируется???!!!". Для успешной компиляции Direct3D8 проекта Вам необходимо включить некоторые заголовочные файлы и скомпоновать Вашу программу с соотвествующими lib-файлами. Наиболее важными являются 2 заголовочных и 2 lib-файла:

• d3d8.h – Файл с определениями основных интерфейсов, констант и тому подобного.

• d3d8.lib – Файл для компоновки Вашей программы с динамической библиотекой Direct3D8.

• d3dx8.h – Вспомогательные интерфейсы и определения, несколько облегчающие жизнь среднестатистическому программисту.

• d3dx8.lib – Библиотека для компоновки программы с d3dx8.dll.

Среди файлов демо-проекта вы увидите 2 файла: D3D8Include.h и D3DX8Include.h. Просто включите их в файл stdafx.h Вашего проекта. Тем самым будут включены все необходимые header-файлы и обеспечена компоновка с соотвествующими lib-файлами.

Ну вот, вроде бы все готово к бою и что же теперь? Первым делом необходимо создать IDirect3D8 объект. Не совсем, правда, грамотно звучит. Правильнее было бы сказать, "необходимо создать некий объект, который выставляет интерфейс IDirect3D8", но, думаю, Вы мне простите подобные вольности. Объект IDirect3D8 обеспечивает создание 3D устройств, получение информации о возможностях устройства, перечисление видеорежимов адаптера и получение подробной информации о них, в общем, кучу всего интересного и нужного. Мой демо-проект для создания этого нужного объекта использует класс-обертку CD3D8Application. Для его использования надо просто унаследовать от него класс приложения и в какой-нибудь функции инициализации (например, в OnInitDialog) вызвать метод CD3D8Application::Direct3DInitOK для проверки результата создания объекта. Объект IDirect3D8 создается в конструкторе класса CD3D8Application с помощью вызова функции Direct3DCreate8. Замечательная функция в том плане, что принимает только один параметр, да и тот просто обязан быть D3D_SDK_VERSION. Таким образом, создание требуемого объекта сводится к следующему:

pDirect3DObject = Direct3DCreate8(D3D_SDK_VERSION);

if (!pDirect3DObject) {

 // Do something!!! Error occured!!!

}

После создание объекта IDirect3D8 мы должны создать еще что-то, на чем мы будем рисовать. Это "что-то" называется IDirect3DDevice8 и мы можем его создать с помощью метода IDirect3D8::CreateDevice. В демо-проекте эта функция вызывается из C3DGraphic::Create следующим образом:

D3DDISPLAYMODE theDisplayMode;

hr = m_p3DApplication->m_pDirect3DObject->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &theDisplayMode);

if (FAILED(hr)) {

 return hr;

}

D3DPRESENT_PARAMETERS thePresentParams;

ZeroMemory(&thePresentParams, sizeof(thePresentParams));

thePresentParams.Windowed = TRUE;

thePresentParams.SwapEffect = D3DSWAPEFFECT_DISCARD;

thePresentParams.BackBufferFormat = theDisplayMode.Format;

thePresentParams.EnableAutoDepthStencil = TRUE;

thePresentParams.AutoDepthStencilFormat = D3DFMT_D16;

hr = m_p3DApplication->m_pDirect3DObject->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,

 m_hwndRenderTarget, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &thePresentParams, &m_p3DDevice);

if (FAILED(hr)) {

 return hr;

}

Только

что мы создали 3D устройство, задав при этом кучу параметров. Несколько комментариев и разъяснений, что есть что:

• 3D устройство было создано для видеоадаптера, используемого по умолчанию. Об этом говорит параметр D3DADAPTER_DEFAULT. Средний житель России имеет от 0 до 1 видеоадаптеров, так что особых проблем с этим параметром возникнуть не должно.

• Созданное устройство имеет один back-буфер, цветовой формат буфера такой же как у экрана.

• Устройство создано для использования в оконном режиме. Весь рендеринг будет направлен на окно m_hwndRenderTarget. Эта переменная соотвествует окну нашего вида C3DGraphFrame. Антиподом оконному режиму служит полноэкранный режим. Для работы с ним надо при создании устройства переменную Windowed установить в FALSE, а не в TRUE.

• Устройство имеет автоматически созданный depth-буфер, который иногда еще называют z-буфером. Формат z-буфера – 16 бит на точку. В наше время трудно (но, правда, можно) найти видеоадаптер, который не поддерживает такой формат z-буфера. Z-буфер используется вычислительным ядром Direct3D для хранения информации о текущей z-координате каждой точки картинной плоскости. В конечном счете это используется для удаления невидимых линий и поверхностей.

• 3D устройство должно использовать все возможности аппаратуры. Если какое-либо требуемое свойство не поддерживается, Direct3D попытается эмулировать его на программном уровне. Вы можете поменять тип устройства с D3DDEVTYPE_HAL на D3DDEVTYPE_REF. В этом случае все вычисления будут проводиться на программном уровне. Такая эмуляция является очень медленной, и не все на свете можно эмулировать.

• Обрабатываться вершины (vertexes) должны на программном уровне. Мы сделали этот выбор, указав значение D3DCREATE_SOFTWARE_VERTEXPROCESSING. Можно указать вместо этого D3DCREATE_MIXED_VERTEXPROCESSING или D3DCREATE_HARDWARE_VERTEXPROCESSING, но эти режимы поддерживаются далеко не всеми видеокартами.

Стоит заметить, что реальное приложение (игра, например) должны вначале анализировать возможности установленного оборудования, а затем уже принимать решение о возможности или, наоборот, невозможности продолжать работу. Для упрощения такая проверка в демо-приложении не делается.

Поделиться:
Популярные книги

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Отдельный танковый

Берг Александр Анатольевич
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Отдельный танковый

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия