0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 8
|
|
1 | |
Парсинг .obj файла22.09.2017, 15:13. Показов 5313. Ответов 9
при парсенге файла столкнулся с серьёзной проблемой, а именно у треугольника три нормали
пример: f 309//309 387//387 312//312 f 310//310 420//420 311//311 f 363//363 308//308 306//306 и у меня есть несколько вопросов: 1) Как у треугольника может быть три нормали ? 2) Как получить одну нормаль для всего треугольника ? 3) Что эти нормали обозначают ?
0
|
22.09.2017, 15:13 | |
Ответы с готовыми решениями:
9
Парсинг IP из двоичного файла Парсинг файла / общие советы / проектирование Считывание и парсинг текста из файла Парсинг строк из текстового файла |
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
24.09.2017, 11:52 | 2 |
defer3,
Треугольник состоит из вершин, конкретно из трех вершин. Каждая вершина состоит имеет определенные свойства, такие как: позицизия в пространстве, нормаль, текстурные координаты, цвет и еще много чего может быть там. Так вот, нормаль в вершине, это перпендикур к плоскости, которую образовали 3 вершины - треугольник. Можно, с помощью математики. Проходишь по всем треугольникам, по три вершины на каждом, строишь плоскость , описываемую уравнением Ax+By+Cz+D = 0 , где ABC у тебя и будет нормаль к этой плоскости и присваиваешь это значение всем трем вершинам треугольника. Из этого сразу становится понятно, что для каждого треугольника, все 3 вершины имеют одинаковое значение нормали к плоскости треугольника. Программы, такие как 3ds max, maya и тд, правильно экспортируют такие файлы как .obj, .3ds, .fbx и другие, которые автоматически вычисляют на каждый треугольник нормаль, и задают это значение каждой вершине этого треугольника.Нормаль - это вектор, направленный перпендикулярно заданной плоскости. Иной раз, этот вектор мы часто используем в тех или иных задачах. Например, для высчитывания освещенности объекта по Ламберту, достаточно посчитать угол, между направлением луча источника света и нормалью плоскости, полученное значение угла - это коффициент освещенности этой плоскости, чем больше угол - тем меньше освещенность; чем меньше угол - тем больше освещенность. Если угол равен 0, значит точка имеет полную освещенность, если угол > 90 - точка не освещена вовсе.
1
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 8
|
|
24.09.2017, 22:37 [ТС] | 3 |
да по 3 я это знаю, но как у треугольника одна нормаль, как они могут в разные стороны смотреть это же бред
0
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
25.09.2017, 08:20 | 4 |
defer3,
А как вы узнаете, что конкретно эта вершина, принадлежит именно этому треугольнику? Вершина может принадлежать нескольким треугольникам сразу, поэтому какие бы вы треугольники не брали, смежные вершины будут иметь разные нормали.
Перед пиксельным шейдером все равно все растеризуется...
0
|
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
|
|
25.09.2017, 18:32 | 5 |
defer3, это нормали не плоского треугольника, это нормали точек поверхности, которые являются вершинами вашего треугольника. У поверхности нормаль в каждой точке, в общем случае, разная.
0
|
25.09.2017, 19:57 | 6 |
Сообщение было отмечено defer3 как решение
Решение
То, что ты описал, это нормаль к плоскости треугольника
А нормаль точки она к треугольнику отношение не имеет. Допустим, есть сфера. Ты её моделируешь множеством точек (которые в будущем соединятся в треугольники). Нормаль точки - это нормаль к оригинальной (т.е. не смоделированной) поверхности в данной точке. В нашем случае со сферой это будет вектор, исходящий из этой точки в направлении от центра сферы Добавлено через 1 минуту Нормаль в вершинах треугольника используется, например, для того, чтобы вычислить нормаль в каждой точке растеризованного треугольника и затем вычислить правильное освещение или углы отражения
3
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 8
|
|
26.09.2017, 01:15 [ТС] | 7 |
спасибо, теперь всё понятно
0
|
0 / 0 / 0
Регистрация: 25.08.2017
Сообщений: 1
|
|
09.12.2017, 00:19 | 8 |
Народ, где помощь?!
0
|
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 8
|
|
09.12.2017, 00:30 [ТС] | 9 |
так вроде всё объяснили
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
09.12.2017, 13:58 | 10 |
Нормали в общем случае (если треугольнику выставлены группы сглаживания) рассчитываются для всей поверхности, и относятся к каждой точке. Это позволяет делать плавные переходы направления нормалей и делать на основе этих нормалей плавное изменение освещённости на "округлых" поверхностях, блики на них, и т.д.
Если треугольник у нас без группы сглаживания, то все 3 нормали в 3 вершинах будут относиться к нему, и направлены, естественно, по нормали к плоскости этого треугольника https://ru.wikipedia.org/wiki/Плоскость , раздел Добавлено через 3 минуты Не по теме: извиняюсь, не заметил кто топикстартер
1
|
09.12.2017, 13:58 | |
09.12.2017, 13:58 | |
Помогаю со студенческими работами здесь
10
Парсинг большого текстового файла Парсинг полного имени файла Парсинг xml файла любой вложенности Парсинг URL - получение имени файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |