Освещение

Сцены, которые Вы рисуете с помощью вышеупомянутых функций, выглядят довольно плоскими без освещения. Цвет освещения равен ориентации освещения. Чтобы создать более реалистичные сцены - Вы должны включить эффект освещения и распределить освещение в нужных местах. Создать правильно освещённые сцены довольно трудно, но эффект очень хорош.

Чтобы включить освещение Вы можете использовать следующую функцию:

d3d_set_lighting(enable) Включает или отключает использование освещения.

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

d3d_set_shading(smooth) Устанавливает или не устанавливает использование эффекта плавного затенения.

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

d3d_light_define_direction(ind,dx,dy,dz,col) Определяет направление освещения. ind - индекс света (используйте небольшое положительное число). (dx,dy,dz) - направление освещения. col - является цветом света (часто Вы будете использовать c_white. Эта функция освещение не включает.
d3d_light_define_point(ind,x,y,z,range,col) Определяет точку освещения. ind - является индексом света (используйте небольшое положительное число). (x,y,z) - позиция освещения. range - указывает сияние освещения. Интенсивность освещения будет уменьшена после уменьшения последнего значения. col - цвет света. Эта функция освещение не включает.
d3d_light_enable(ind,enable) Включает (истина) или отключает (ложь) освещение числа ind.

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

d3d_vertex_normal(x,y,z,nx,ny,nz) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz).
d3d_vertex_normal_color(x,y,z,nx,ny,nz,col,alpha) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz) и с некоторым цветом и значением альфа.
d3d_vertex_normal_texture(x,y,z,nx,ny,nz,xtex,ytex) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz) и с позицией (xtex,ytex) в текстуре, смешивающейся с цветом и с альфа значением, установленных прежде.
d3d_vertex_normal_texture_color(x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz) с позицией (xtex,ytex) в текстуре, смешивающейся с некоторым цветом и альфа значением.

Отметьте, что для основных форм Вы можете нормально рисовать при установленной автоматической корректировке.