Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Вниз

рассчёт нормалей   Найти похожие ветки 

 
DoKi   (2008-08-05 12:46) [0]

Люди помогите  разобраться как  рассчитывать нормали к полигонам,  прочитал  кучу  статей в сети но ничего не понял
Может можно как нибуть обойтись без нормалей?????


 
Сергей М. ©   (2008-08-05 13:33) [1]


> Может можно как нибуть обойтись без нормалей?


Если тебе известны иные методы определения ориентации полигона в пространстве или тебя она вообще не волнует, то нибуть можно и обойтись)


 
DoKi   (2008-08-05 13:41) [2]

волнует


 
Сергей М. ©   (2008-08-05 13:46) [3]

Ну а если волнует, тогда перечитай еще раз кучу, авось поймешь.
А если не поймешь, то у тебя большие проблемы с элементарной геометрией и векторной алгеброй в рамках школьного курса.


 
DoKi   (2008-08-05 14:08) [4]

везде одно и тоже написано  
равно 0  перпиндикулярна  поверхности и нужно найти среднее значение  нормалей


 
Сергей М. ©   (2008-08-05 14:09) [5]


> равно 0  перпиндикулярна  поверхности


Нормаль не может быть неперпендикулярна поверхности, на то она и нормаль)


> нужно найти среднее значение  нормалей


Нужно кому и для чего ?


 
DoKi   (2008-08-05 14:12) [6]

ну к точке подходят несколько граней  у каждой своя  нормаль  их(нормали) надо  сложить и найти  ср нормль


 
DoKi   (2008-08-05 14:14) [7]

я пререпутал равна не 0 а 1


 
Сергей М. ©   (2008-08-05 14:30) [8]


> к точке подходят несколько граней


Как это "подходят" ? Ногами что ли ?
Пользуй геометрические термины, а не отсебячину ..


 
DoKi   (2008-08-05 14:34) [9]

Короче алгоритм такой
1)найти  нормали  каждой грани  и сохранить их в массиве
2)найти среднее значение нормалей  тех граней  которые соединяются в одной  точке(ето ср значение и будет  нормаль данной точки)


 
Сергей М. ©   (2008-08-05 14:36) [10]


> 2)найти среднее значение


Ты не знаешь как найти среднее арифметическое n чисел ?


 
DoKi   (2008-08-05 14:43) [11]

да какое ср арифмитическое
нормаль  ето вектор  равен 1  перпендикулярен поверхности имеет направление(вроде)  и соостоит из 3 цифр(x,y,z)
но как его найти я понятия не имею


 
Сергей М. ©   (2008-08-05 14:53) [12]


> как его найти я понятия не имею


Ты не знаешь что такое векторное произведение ?


> соостоит из 3 цифр


Не состоит оно "из цифр")

Вектор задается числами, а не "цифрами".


 
DoKi   (2008-08-05 14:56) [13]

Наверно  начать  надо с нахождения  нормали к треугольнику

как  найти???


 
Сергей М. ©   (2008-08-05 15:07) [14]

Формула для нахождения произведения двух 3D-векторов:

C = A x B = ( AyBz — ByAz , AzBx – BzAx , AxBy – BxAy)

Что в ней тебе не понятно ?


 
DoKi   (2008-08-05 15:09) [15]

А где тут нормаль к треугольнику???


 
DoKi   (2008-08-05 15:14) [16]

с-нормаль??


 
Сергей М. ©   (2008-08-05 15:20) [17]

Как это где ?

С и есть та самая нормаль..


 
DoKi   (2008-08-05 15:30) [18]

а  А  В  AyBz   ByAz AzBx  BzAx  AxBy  BxAy
что такое?


 
Сергей М. ©   (2008-08-05 15:36) [19]

Координаты одной из вершин треугольника полагаются равными (0, 0, 0), в этой вершине ты расчитываешь нормаль.

А и В - векторы, определяющие две другие вершины треугольника относительно вершины, в которой ты расчитываешь нормаль.


 
Сергей М. ©   (2008-08-05 15:38) [20]

AyBz   ByAz AzBx  BzAx  AxBy  BxAy - это произведения соответствующих координат соответствующих векторов.


 
DoKi   (2008-08-05 15:38) [21]

как и найти А В


 
Сергей М. ©   (2008-08-05 15:47) [22]

Переносом системы координат в точку  - одну из вершин треугольника, - в которой ты расчитываешь нормаль к этому треугольнику.


 
DoKi   (2008-08-05 15:50) [23]

спасибо  но  я ничерта не понял


 
DoKi   (2008-08-05 15:50) [24]

спасибо  но  я ничерта не понял


 
Jeer ©   (2008-08-05 15:58) [25]


> Сергей М. ©   (05.08.08 15:47) [22]


Ну ты прям, как учебник по аналитической геометрии :)


> DoKi   (05.08.08 15:50) [23]
>
> спасибо  но  я ничерта не понял


Достаточно было одного раза, чтобы мы поняли.


 
Сергей М. ©   (2008-08-05 16:06) [26]

Что конкретно ты не понял ?

Это же геометрия школьного курса !

Ты чем занимался на уровках геометрии ?)

Пусть треугольник задан в 3D-пространстве вершинами A(xa, ya, za), B(xb, yb, zb), C(xc, yc, zc)

Пусть в вершине С необходимо расчитать вектор нормали к плоскости заданного треугольника.

Переносим начало координат в вершину C, получаем треугольник, две другие вершины которого заданы векторами

A(xa-xc, ya-yc, za-zc), B(xb-xc, yb-yc, zb-zc)

Тем самым имеем пару векторов, формула векторного произведения которых приведена в [14]

Дальше-то сам дотумкаешь ?)


 
Сергей М. ©   (2008-08-05 16:08) [27]


> Jeer ©   (05.08.08 15:58) [25]


Терпелки у меня на эту манную кашу вряд ли хватит)


 
Jimmy   (2008-08-05 21:47) [28]

Может про перенос системы координат - лишнее?


 
Сергей М. ©   (2008-08-06 08:09) [29]


> Jimmy   (05.08.08 21:47) [28]


Кому как)


 
XProger ©   (2008-08-06 23:40) [30]

OpenGL при включённом FaceCulling"е без задания нормалей расчитывает ориентацию по порядку обхода вершин (по и против часовой)


 
Viktorious ©   (2008-08-07 00:33) [31]

1. Слово "Расчет" пишется с одной буквой с.

2. Нормаль считается так, пишу для каждой отдельной координаты:

Сx = AyBz - AzBy
Cy = AzBx - AxBz
Cz = AxBy - AyBx

Где C(x,y,z) - искомая нормаль, A(x,y,z), B(x,y,z) - вектора, которые исходят из одной точки треугольника (чтобы найти координаты вектора, надо вычесть из координат точки конца вектора координаты точки начала вектора).

3. Вектора усредняются покоординатно, то есть берется обычное арифметическое среднее координат x,y,z.

3. СРОЧНО взять книжку по линейной алгебре и геометрии (работа с векторами и матрицами, афинные преобразования на плоскости и в пространстве и т.д.) и изучать внимательно, иначе далеко в программировании графики не уйдете...


 
palva ©   (2008-08-07 11:33) [32]

Чтобы нормали имело смысл усреднять, их надо сделать единичной длины. Кроме того, нужно выбрать правильное направление, чтобы нормали смотрели согласованно, для этого нужно согласовать порядок вершин в треугольниках при подстановке в формулу вычисления нормали.


 
ketmar ©   (2008-08-07 12:43) [33]

>[32] palva © (2008-08-07 11:33:00)
>Чтобы нормали имело смысл усреднять, их надо сделать единичной длины

нормали не бывают «не единичной длины». «нормаль не единичной длины» называется «перпендикуляр». %-)

---
Understanding is not required. Only obedience.


 
Псалтырь ©   (2008-08-07 13:19) [34]


> ketmar ©   (07.08.08 12:43) [33]

Нормаль - это вектор. Перпендикуляр - это прямая. Не так ли?


 
uw ©   (2008-08-07 13:32) [35]

Нормаль - это вообще прямая. А вот орт - единичный вектор (например, в направлении нормали).


 
uw ©   (2008-08-07 13:32) [36]

А нормуль - это когда принял на грудь, и хорошо...


 
@!!ex ©   (2008-08-07 13:34) [37]

Жесть.. я когда в школе учился, мне тоже было лень разбираться во всей этой зауми, и я спрашивал на форумах...
А когда мне отвечали, что нормаль - это вектор получаемый векторным произведением двух векторов параллельных двум сторонам треугольнкиа, я ничего не понимал, обижался и уходил. :))))
А то, чего автор хочет добится - это сглаженные нормали.
Считаем нормаль для каждого треугольника.(Векторное произведение + нормализация помогут)
Потом складываем вектора и делим(Обычно нахождение среднего арифметического).
Получаем для каждого треугольника три разных нормали. По одной на каждую вершину.
В итоге освещение посчитанное по этим нормалям получается значительно более качественным.
3ds Max умеет делать это все сам.. Поэтому в моем коде, единственное место где считаются нормали - это расчет теневых объемов. Все остальное грузхится из моделей...


 
Сергей М. ©   (2008-08-07 13:36) [38]


> ketmar ©   (07.08.08 12:43) [33]

http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C


 
Псалтырь ©   (2008-08-07 13:43) [39]

То есть лента Мёбиуса - пример неориентированной поверхности?


 
ketmar ©   (2008-08-07 13:52) [40]

>[38] Сергей М. © (2008-08-07 13:36:00)
мда. ты прав, я ошибся. извиняюсь.

---
All Your Base Are Belong to Us


 
Дуб ©   (2008-08-07 13:58) [41]


> Псалтырь ©   (07.08.08 13:43) [39]

И бутылка Клейна. Не с клеем, а Клейна.


 
palva ©   (2008-08-07 14:23) [42]


> нормали не бывают «не единичной длины». «нормаль не единичной
> длины» называется «перпендикуляр». %-)

Называйте как хотите, но формулы [31] не дают вектор единичной длины. Его надо дополнительно нормализовать, да еще направить в нужную сторону.


 
@!!ex ©   (2008-08-07 14:32) [43]

> да еще направить в нужную сторону.

это уже лишнее. он и так правильно направлен. просто система координат относительная. относительно треугольника.


 
palva ©   (2008-08-07 14:39) [44]


> это уже лишнее

Ну скорее всего лишнее. Если вершины треугольников заданы в согласованном порядке, (что, наверно, имеет место) и автор расположит сомножители векторного произведения в соответствии с этим порядком (здесь уже можно сомневаться).


 
ketmar ©   (2008-08-07 16:23) [45]

по-моему, топикстартер давно в ужосе убежал туда, где дадут кусок кода для копипасты, а не заумные формулы и слова.

---
Understanding is not required. Only obedience.


 
@!!ex ©   (2008-08-07 16:25) [46]

> туда, где дадут кусок кода для копипасты

Так уже дали же и здесь:
> [31] Viktorious ©   (07.08.08 00:33)


А вообще примеров расчета нормалей по всему гуглу разбросано ТАКОЕ количество.. что сложно не наткнуться...


 
ketmar ©   (2008-08-07 16:29) [47]

>[46] @!!ex © (2008-08-07 16:25:00)
>Так уже дали же и здесь:

ты чо? не, чувак, я вот вставил в свою программу — так она больше не компилируется! ты зачем мне программу поломал, чувак?!!

---
All Your Base Are Belong to Us



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

Форум: "Прочее";
Текущий архив: 2008.09.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.045 c
15-1218125932
ProgRAMmer Dimonych
2008-08-07 20:18
2008.09.28
Системе не удаётся найти указанное устройство


3-1207138799
tomkat
2008-04-02 16:19
2008.09.28
описание UDFS.DLL


2-1218714100
Lamer666
2008-08-14 15:41
2008.09.28
Из Excel-я в DbGrid


6-1193220112
Alex_C
2007-10-24 14:01
2008.09.28
HTTPS и POST метод


1-1194871236
Damager
2007-11-12 15:40
2008.09.28
Align, приоритет





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