Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.30;
Скачать: CL | DM;

Вниз

Нормаль в OpenGL   Найти похожие ветки 

 
max999   (2005-10-11 11:37) [0]

Наверное ламерский вопросик :)
Как вычислить координаты нормали по 3 точкам?
Я делал так:

procedure GetFaceNormal(const x1, y1, z1, x2, y2, z2, x3, y3, z3: GLfloat; var nx, ny, nz: GLfloat);
var
 wrki, vx1, vy1, vz1, vx2, vy2, vz2: GLFloat;
 nxt, nyt, nzt: GLFloat;
begin
vx1:=x1-x2;
vy1:=y1-y2;
vz1:=z1-z2;
vx2:=x2-x3;
vy2:=y2-y3;
vz2:=z2-z3;
nxt:=vy1*vz2-vz1*vy2;
nyt:=vz1*vx2-vx1*vz2;
nzt:=vx1*vy2-vy1*vx2;
wrki:=Sqrt(nxt*nxt+nyt*nyt+nzt*nzt);
if wrki = 0 then wrki:=1;
nx:=nxt/wrki;
ny:=nyt/wrki;
nz:=nzt/wrki;
end;

но оно не работает, нормаль направлена из какого-то угла в центр треугольника. Освещение не просчитываеться как нужно... :(

Киньте, плиз, готовую ф-цию, если можно... Задолбался уже в Яндексе и Гугле искать!


 
MBo ©   (2005-10-11 12:24) [1]

Да правильно у тебя считается - обычное векторное произведение.
Учти только, что получаются не координаты точки, а составляющие единичного вектора.
И направление вектора зависит от порядка обхода вершин.


 
max999   (2005-10-11 12:32) [2]

Да, это радует, что правильно...
А как "визуализировать" этот вектор? У меня есть квадратный полигон, я беру 3 его стороны, вычисляю для них нормаль, потом рисую линию: одна из сторон - ее начало, конец - полученные координаты нормали. Линия явно не перпендикулярна полигону да еще и направлена "наизнанку"... Так должно быть?


 
MBo ©   (2005-10-11 12:48) [3]

>конец - полученные координаты нормали
так у тебя видимо, та ошибка, о которой я сказал?

начало нормали для отрисовки - пусть будет вершина 1.
тогда ее конец - x1+nx, y1+ny, z1+nz

>да еще и направлена "наизнанку"...
еще раз - ПОРЯДОК обхода вершин задает направление нормали в одну из полуплоскостей
В данном случае просто знаки измени, а вообще нужно следить за единообразием порядка обхода (нумерации).


 
max999   (2005-10-11 14:00) [4]

Огромное спасибо. Теперь все правильно рисуеться.



Страницы: 1 вся ветка

Текущий архив: 2006.04.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.257 c
2-1144851391
Лом
2006-04-12 18:16
2006.04.30
Перевернуть оси координад


2-1144657313
ANB_Temp
2006-04-10 12:21
2006.04.30
Как в самой 1C выполнить ее же выражение ?


3-1141972736
worldmen
2006-03-10 09:38
2006.04.30
SQL-запрос. 4 таблицы.


9-1128942318
SPACE
2005-10-10 15:05
2006.04.30
Народ никак немогу сделать скриншот из игрушки


4-1139220699
Stas_Kalishenko
2006-02-06 13:11
2006.04.30
Toolbar-меню в чужом приложении