Нормали - это пермендикуляры к поверхности в любой точке. В Blitz'е нормали имеет каждый вертекс модели.
Вы спросите, а зачем они нужны? Сперва может показатся что они ненужны вовсе... но это на первый взгляд.
На самом деле нормали влияют на освещение модели:
- если нормаль направлена прямо на источник света, то эта часть модели освещается полностью (освещенность в этой точке максимальна);
- если нормаль находится под углом к источнику то возмодны два случая:
1. Угол нормали больше 0 но меньше 90 градусов - в этом случае освещенность меняется по мере изменения угла т.е. чем больше угол тем меньше освященность;
2. Угол нормали больше или равна 90 градусов - в этом случае модель освещается глобальной подсветкой (в Blitz'е она задается оператором
AmbientLight red#,green#,blue#).
Таким образом правильное направление нормали влияет на качаство освещения модели.
В Blitz'е нормали можно изменить двумя методами:
- возложить определение нормалей на Blitz - это осуществляется оператором
UpdateNormals mesh;
- вручную - осуществляется оператором
VertexNormal surface,index,nx#,ny#,nz#. Пример использования этого оператора:
For k=1 To CountSurfaces(Mesh)
Surf%=GetSurface(Mesh,k)
For i=1 To CountVertices(Surf)
*VertexNormal(Surf%,I,nx,ny,nz)
Next
Next
Также можно экспортировать геометрию вместе с нормалями из программ трехмерного моделирования, что избавит вас от принудительного изменения направления нормалей.
Пример прикрепленный к этому сообщению демонстрирует влияние нормалей на освещение сфер: зеленая сфера имеет правильное направление нормалей (т.е. перпендикулярно к поверхности), а нормали оранжевой сферы направлены в точку, из которой начал движение источник света.