Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
9-1127503221
grouzd[E]v
2005-09-23 23:20
2006.04.30
64k intro testing


2-1144930611
Der Nechk@ssoff
2006-04-13 16:16
2006.04.30
Типизация файла


3-1141994963
apl
2006-03-10 15:49
2006.04.30
FastReport 3


2-1144765707
Кашперук Иван
2006-04-11 18:28
2006.04.30
Вопрос про Меню


15-1144571134
Ega23
2006-04-09 12:25
2006.04.30
С Днём рождения! 9 апреля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский