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

Использование света и материалов

В прошлых уроках мы уже перешли в трехмерное пространство, но как вы видели - оно получилось каким то странным, темным и не понятным. Все дело в том, что мы просто создали трехмерный объект и начали его вращать в трехмерной сцене. Для получения нормального изображения трехмерной сцены нам необходимо сделать ее более реалистичной. Для этого необходимо использовать источники света для освещения и материалы для объектов сцены. Тогда у нас получится уже вполне реальная и наглядная трехмерная сцена, по которой будет видно, что мы сделали действительно что то трехмерное и красивое.

Начнем с источников света. Для того что бы они начали работать нам необходимо их создать и задать необходимые параметры. Но для начала нужно снова изменить формат наших вершин, нам прийдется для каждой вершины кроме ее трех координат задать еще три координаты для вектора нормали к данной вершины. Нормали необходимы для расчета правильного освещения заданной грани.

Вот новое объявление наших вершин :

Мы задали шесть координат - три для координат положения, и еще три для вектора нормали.

Далее создадим какой ни будь красивый трехмерный объект. Для данного примера я использовал такую вот штуку :

Теперь собственно возьмемся за тему данного урока.

Для начала создадим два материала :

Я создал две глобальных структуры для описания материалов, и задал им необходимые параметры, а конкретнее - задал цвет.

Теперь их уже можно использовать. Вот как выглядит теперь функция отрисовки окна :

Почти все в этой функции вам уже известно. Необходимо обратить внимание только на следующие строки :

Данным образом мы показываем D3D8 какой материал нам необходимо использовать для отрисовки последующих объектов и отрисовываем этот объект. Затем меняем материал и отрисовываем новый объект.

Но пока радоваться еще рано. Нам необходимо еще создать и научиться использовать источники света.

Создадим теперь один источник освещения :

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

Но этого еще не достаточно. Еще необходимо задать некоторые параметры для нашего D3D8 устройства :

Первое - мы говорим, что освещение разрешено и его нужно обрабатывать. Второе - задаем цвет общего освещения (в данном случае 0 - но вообще можно задать любое другое).

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

Вот теперь вроде все... Да, кстати - увидеть вы должны нечто похожее на следующее :

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