Главная страница
    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.009 c
15-1144392786
TUser
2006-04-07 10:53
2006.04.30
Выносить или нет?


6-1137165537
Volf_555
2006-01-13 18:18
2006.04.30
Как открыть интернет-страницу в НОВОМ окне?


4-1139390033
plotn
2006-02-08 12:13
2006.04.30
Динамическая загрузка dll


15-1144299862
Ega23
2006-04-06 09:04
2006.04.30
Тьфу, блин!!! С Днём рождения! 6 апреля


2-1144933698
Сергей И
2006-04-13 17:08
2006.04.30
События формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский