LibKing » Книги » comp-programming » Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics

Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics

Тут можно читать онлайн Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics - бесплатно полную версию книги (целиком). Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте LibKing.Ru (ЛибКинг) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
libking
  • Название:
    DirectX 8. Начинаем работу с DirectX Graphics
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Ваша оценка:

Сергей Ваткин - DirectX 8. Начинаем работу с DirectX Graphics краткое содержание

DirectX 8. Начинаем работу с DirectX Graphics - описание и краткое содержание, автор Сергей Ваткин, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

DirectX 8. Начинаем работу с DirectX Graphics - читать онлайн бесплатно полную версию (весь текст целиком)

DirectX 8. Начинаем работу с DirectX Graphics - читать книгу онлайн бесплатно, автор Сергей Ваткин
Свет

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать

Удачной тебе компиляции!

Примечание: Если будешь писать программу сам, помни, что для ее компиляции нужно подключить библиотечные файлы [*.lib]. Lib'ы подключайются так:

a. Project->Settings…

b. Открой вкладку "Link"

c. В строке "Object/library modules" добавь в начало d3d8.lib

d. Должно получиться примерно следующее: "d3d8.lib kernel32.lib user32.lib gdi32.lib…"

Автор: voxatu. 

DirectX 8: Создание и текстурирование простого трехмерного объекта

Автор: voxatu

Ты уже умеешь инициализировать Direct3D, а значит можно на этой базе создавать трехмерные объекты. Чтобы было совсем интересно, натянем на наш трехмерный объект текстуру и заставим его вращаться!!! Кроме того, воспользуемся фильтрацией текстур и MipMapping'ом, чтобы получить более реалистичный результат почти без потери быстродействия. Попутно, научимся работать со вспомогательной библиотекой Direct3DX. Пример можешь скачать ЗДЕСЬ.

Фото

Итак, приступим. За "трехмерный объект" возьмем правильную четырехугольную пирамиду, а за текстуру — подредактированную фотографию каменной стены (первоначальный вариант текстуры взят с сайта http://www.3dcafe.com/, на котором собрано огромное количество различных бесплатных для скачивания изображений).

Функции WinMain(), MessageProc() и InitD3D() будут очень похожи на аналогичные функции программы из предыдущей статьи, поэтому я буду объяснять, в основном, только модифицированные их части. Структура программы немного изменилась. Теперь более грамотно обрабатываются ошибки, которые могут возникнуть при выполнении той или иной части программы.

Рассмотренные функции исходника:

Функция WinMain()

Функция Initialization()

Функция InitD3D()

Функция InitTexture()

Функция InitScene

Функция DoMatrices()

Функция RenderScene()

Функция Deinitialization()

Функция MessageProc()

Функция WinMain()

Главная функция нашего приложения. Практически аналогична одноименной функции из предыдущей статьи. Единственное, что сильно изменилось — цикл обработки сообщений. Также, вынесены в отдельные функции инициализация и деинициализация приложения.

if (Initialization(hWnd)) {

 ShowWindow(hWnd, nCmdShow);

 UpdateWindow(hWnd);

 MSG msg;

 ZeroMemory(&msg, sizeof(msg));

 while(msg.message != WM_QUIT) {

  if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) {

   TranslateMessage(&msg);

   DispatchMessage(&msg);

  } else RenderScene();

 }

}

Deinitialization();

Если инициализация проходит успешно, окно приложения отображается на экране и начинается цикл обработки сообщений, иначе деинициализация и выход из программы. Функция PeekMessage() проверяет очередь сообщений для текущей нити процесса и, если таковые имеются, помещает одно из них в структуру MSG. Флаг PM_REMOVE говорит о том, что сообщение из очереди удаляется, т.е. на нас возлагается ответственность его корректной обработки в любом случае. Это мы и делаем в следующих двух строчках. Если же очередь сообщений пуста, вызывается функция RenderScene(), которая, согласно ее названию, рендерит очередной кадр сцены. Как только поступает сообщение WM_QUIT, происходит деинициализация приложения (функция Deinitialization()).

Функция Initialization()

Осуществляет грамотную (т.е. с учетом ошибок) инициализацию D3D, текстур и сцены. Замечу, что все функции нашего приложения, в которых может возникнуть ошибка, имеют тип BOOL. Рассмотрим программный код:

CurrentFilter = D3DTEXF_NONE;

if (!InitD3D(hWnd)) return FALSE;

if (!InitTexture()) {

 MessageBox(NULL, "Не найден файл текстуры!", "Ошибка", MB_ICONERROR);

 return FALSE;

}

if (!InitScene()) return FALSE;

return TRUE;

Что такое CurrentFilter? Забегая вперед, скажу, что наша программа будет использовать фильтрацию текстур, причем можно будет переключаться между различными фильтрами. Неплохо для первой программы с использованием D3D? ;-) Итак, первая строка кода говорит, что по умолчанию фильтром является D3DTEXF_NONE, т.е. фильтрация не используется. Затем вызываются три функции дополнительной инициализации, причем, если хотя бы в одной из них возникнет ошибка, функция Initialization() вернет значение FALSE, что в свою очередь остановит выполнение программы (вспомни функцию WinMain()) и приведет к деинициализации. Если функция InitTexture() возвращает значение FALSE, значит не удалось найти файл текстуры и перед аварийным завершением программы необходимо вывести предупредительное сообщение: MessageBox(NULL, "Не найден файл текстуры!", "Ошибка", MB_ICONERROR);

Функция InitD3D()

Согласно названию, эта функция инициализирует D3D %) Перед созданием устройства рендеринга, необходимо настроить параметры D3DPRESENT_PARAMETERS. К параметрам, которые мы использовали в предыдущем приложении добавилось лишь две строки:

p_p.EnableAutoDepthStencil = TRUE;

p_p.AutoDepthStencilFormat = D3DFMT_D16;

Первая говорит о том, что при рендеринге будет использоваться Depth Buffer ("буфер глубины"), причем D3D будет управлять им автоматически. Когда разберешься с программой, попробуй поэкспериментировать: запусти программу в исходном виде, а затем проверь, что получится, если эти две строки удалить. Depth Buffer еще называют Z-Buffer'ом.

Рассмотрим принцип его использования на примере. Представь себе человека на фоне кирпичной стены… Теперь мысленно переведи эту "сцену" в Direct3D (для этого, необходимо задать человека и стену в виде набора текстурированных полигонов) и заставь его эту сцену отрендерить. То, что мы увидим на экране — всего лишь двумерная проекция нашей сцены. Т.о., D3D спроектировал на плоскость экрана стену и человека. Причем, мы увидели человека на фоне стены, а не стену на фоне человека, т.к. он стоит ближе к нам Ж-) Как же D3D "узнает" что именно проектировать на экран раньше, чтобы не было бессмысленных перекрытий? Для этого используется Z-Buffer! Z-Buffer представляет собой массив Z-координат каждой точки этой поверхности (будем называть ее числовой составляющей (ЧС) Z-Buffer'а). Ось Z направлена в плоскость экрана (от тебя). Каждой точке сопоставлен единственный элемент ЧС. Перед началом рендеринга Z-буфер может быть заполнен в каждой точке значением равным максимально возможным расстоянием от наблюдателя до объекта сцены. После этого, для каждого полигона в сцене выполняются следующие действия:

Читать дальше
Свет

Шрифт:

Сбросить

Интервал:

Закладка:

Сделать


Сергей Ваткин читать все книги автора по порядку

Сергей Ваткин - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




DirectX 8. Начинаем работу с DirectX Graphics отзывы


Отзывы читателей о книге DirectX 8. Начинаем работу с DirectX Graphics, автор: Сергей Ваткин. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям


Прокомментировать
Большинство книг на сайте опубликовано легально на правах партнёрской программы ЛитРес. Если Ваша книга была опубликована с нарушениями авторских прав,
пожалуйста, направьте Вашу жалобу на PGEgaHJlZj0ibWFpbHRvOmFidXNlQGxpYmtpbmcucnUiIHJlbD0ibm9mb2xsb3ciPmFidXNlQGxpYmtpbmcucnU8L2E+ или заполните форму обратной связи.
img img img img img