Главная страница
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.025 c
2-1144782592
kester
2006-04-11 23:09
2006.04.30
Выделение строки цветом в TRichEdit


15-1144528698
Pat
2006-04-09 00:38
2006.04.30
Написание игры


4-1139568531
Vlad2
2006-02-10 13:48
2006.04.30
Как определить, нажата ли левая клавиша мыши


15-1144414217
Ezorcist
2006-04-07 16:50
2006.04.30
Как перезагрузить ПК?


1-1143086318
walkernet
2006-03-23 06:58
2006.04.30
Как можно программно переместить курсор мыши?