Показать сообщение отдельно
Старый 16.10.2005, 19:41   #1
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Хорошо

Нормали - это пермендикуляры к поверхности в любой точке. В 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
Также можно экспортировать геометрию вместе с нормалями из программ трехмерного моделирования, что избавит вас от принудительного изменения направления нормалей.

Пример прикрепленный к этому сообщению демонстрирует влияние нормалей на освещение сфер: зеленая сфера имеет правильное направление нормалей (т.е. перпендикулярно к поверхности), а нормали оранжевой сферы направлены в точку, из которой начал движение источник света.
__________________
Blitz3d to Unity Wiki

Последний раз редактировалось pax, 11.10.2011 в 01:09.
(Offline)
 
Ответить с цитированием