На главную страницу Написать письмо Добавить в избранное Сделать www.comprog.ru стартовой

Начинаем использовать настоящее 3D

На прошлых уроках мы уже научились создавать и рендерить треугольники (пока еще правда 2D) на экране монитора. Пришло время переходить к трехмерным координатам. Вся трехмерная геометрия основана на использовании матриц, сами матрицы мы создавать не будем, эту обязанность будет выполнять D3D8, вам только нужно уметь мыслить в трех измерениях (хотя это и не обязательно), а желательно знать некоторые основы трехмерной геометрии и трехмерного же пространства.

В общем, переходим прямо к делу...

Главное что у нас появляется при переходе от 2D к 3D это новая координата (Z), поэтому нам необходимо в объявлении наших вершин слегка изменить код :


struct CUSTOMVERTEX { float x, y, z; };
#define D3DFVF_CUSTOMVERTEX ( D3DFVF_XYZ )

Соответственно нам необходимо изменить объявление наших вершин для примера :

Подготовительные шаги сделаны.

Теперь возьмемся за ту часть, которая обеспечит нам переход из двухмерного пространства в трехмерное. Здесь мы вводим в рассмотрение три матрицы :

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


D3DXMATRIX matWorld;
D3DXMATRIX matView;
D3DXMATRIX matProj;

Далее нам необходимо задать этим матрицам начальные значения :

В данном конкретном виде мы получаем :

-- ставим вращение сцены равное 0 (я не знаю почему, но не писать данную строчку вообще нельзя - просто ни чего работать не будет)
-- матрица вида - для ее задания используются несколько параметров :

-- точка, где находится наблюдатель,
-- точка на которую смотрит наблюдатель,
-- и верхний вектор зрения наблюдателя.

-- матрица задания проецирования тоже содержит несколько необходимых параметров :

-- первое задаем поле зрение (field of view)
-- затем устанавливаем соотношение геометрических размеров (aspect ratio)
-- два последних параметра задают передний и задний границы отсечения трехмерной геометрии, за этими границами ничего отрисовываться не будет.

После того как вы их создали их нужно установит для вашего устройства D3D8 :

Я создал для этого отдельную функцию, так как установка параметров вам также потребуется в случае, когда вы сбросили параметры устройства (смотрите прошлый урок).

Теперь функция рендеринга вашей сцены будет выглядеть примерно так :

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

У вас должно получиться нечто похожее на следующее :

Это пожалуй все на сегодня...

  Поиск по сайту
  
Яндекс цитирования