Форум: "Игры";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];
ВнизНормаль в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.011 c