0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 8
1

Парсинг .obj файла

22.09.2017, 15:13. Показов 5313. Ответов 9
Метки obj (Все метки)

Author24 — интернет-сервис помощи студентам
при парсенге файла столкнулся с серьёзной проблемой, а именно у треугольника три нормали
пример:
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
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2017, 15:13
Ответы с готовыми решениями:

Парсинг IP из двоичного файла
День добрый. Как произвести парсинг IP адреса который расположен где-то в тексте двоичного файла?...

Парсинг файла / общие советы / проектирование
Здравствуйте, товарищи! Необходимо "пропарсить" файл, имеющий расширение doc. Файл большой,...

Считывание и парсинг текста из файла
Задание таково: У нас есть созданный файл где забита база от такого построчного...

Парсинг строк из текстового файла
Доброго времени суток, господа! Уже n-ое количество времени мучаюсь со следующей задачей: ...

9
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
24.09.2017, 11:52 2
defer3,
Цитата Сообщение от defer3 Посмотреть сообщение
1) Как у треугольника может быть три нормали ?
Треугольник состоит из вершин, конкретно из трех вершин. Каждая вершина состоит имеет определенные свойства, такие как: позицизия в пространстве, нормаль, текстурные координаты, цвет и еще много чего может быть там.
Так вот, нормаль в вершине, это перпендикур к плоскости, которую образовали 3 вершины - треугольник.

Цитата Сообщение от defer3 Посмотреть сообщение
2) Как получить одну нормаль для всего треугольника ?
Можно, с помощью математики. Проходишь по всем треугольникам, по три вершины на каждом, строишь плоскость , описываемую уравнением Ax+By+Cz+D = 0, где ABC у тебя и будет нормаль к этой плоскости и присваиваешь это значение всем трем вершинам треугольника. Из этого сразу становится понятно, что для каждого треугольника, все 3 вершины имеют одинаковое значение нормали к плоскости треугольника. Программы, такие как 3ds max, maya и тд, правильно экспортируют такие файлы как .obj, .3ds, .fbx и другие, которые автоматически вычисляют на каждый треугольник нормаль, и задают это значение каждой вершине этого треугольника.

Цитата Сообщение от defer3 Посмотреть сообщение
3) Что эти нормали обозначают ?
Нормаль - это вектор, направленный перпендикулярно заданной плоскости. Иной раз, этот вектор мы часто используем в тех или иных задачах. Например, для высчитывания освещенности объекта по Ламберту, достаточно посчитать угол, между направлением луча источника света и нормалью плоскости, полученное значение угла - это коффициент освещенности этой плоскости, чем больше угол - тем меньше освещенность; чем меньше угол - тем больше освещенность. Если угол равен 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,
Цитата Сообщение от defer3 Посмотреть сообщение
да по 3 я это знаю, но как у треугольника одна нормаль, как они могут в разные стороны смотреть это же бред
А как вы узнаете, что конкретно эта вершина, принадлежит именно этому треугольнику? Вершина может принадлежать нескольким треугольникам сразу, поэтому какие бы вы треугольники не брали, смежные вершины будут иметь разные нормали.
Перед пиксельным шейдером все равно все растеризуется...
0
672 / 475 / 215
Регистрация: 06.09.2013
Сообщений: 1,306
25.09.2017, 18:32 5
defer3, это нормали не плоского треугольника, это нормали точек поверхности, которые являются вершинами вашего треугольника. У поверхности нормаль в каждой точке, в общем случае, разная.
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
25.09.2017, 19:57 6
Лучший ответ Сообщение было отмечено defer3 как решение

Решение

Цитата Сообщение от Bretbas Посмотреть сообщение
Так вот, нормаль в вершине, это перпендикур к плоскости, которую образовали 3 вершины - треугольник
То, что ты описал, это нормаль к плоскости треугольника

А нормаль точки она к треугольнику отношение не имеет. Допустим, есть сфера. Ты её моделируешь множеством точек (которые в будущем соединятся в треугольники). Нормаль точки - это нормаль к оригинальной (т.е. не смоделированной) поверхности в данной точке. В нашем случае со сферой это будет вектор, исходящий из этой точки в направлении от центра сферы

Добавлено через 1 минуту
Цитата Сообщение от Bretbas Посмотреть сообщение
Перед пиксельным шейдером все равно все растеризуется...
Нормаль в вершинах треугольника используется, например, для того, чтобы вычислить нормаль в каждой точке растеризованного треугольника и затем вычислить правильное освещение или углы отражения
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
Цитата Сообщение от defer3 Посмотреть сообщение
1) Как у треугольника может быть три нормали ?
Нормали в общем случае (если треугольнику выставлены группы сглаживания) рассчитываются для всей поверхности, и относятся к каждой точке. Это позволяет делать плавные переходы направления нормалей и делать на основе этих нормалей плавное изменение освещённости на "округлых" поверхностях, блики на них, и т.д.
Если треугольник у нас без группы сглаживания, то все 3 нормали в 3 вершинах будут относиться к нему, и направлены, естественно, по нормали к плоскости этого треугольника
Цитата Сообщение от defer3 Посмотреть сообщение
2) Как получить одну нормаль для всего треугольника ?
https://ru.wikipedia.org/wiki/Плоскость , раздел
Уравнение плоскости, проходящей через три заданные точки..., не лежащие на одной прямой:
Цитата Сообщение от defer3 Посмотреть сообщение
Что эти нормали обозначают ?
Нормали - векторы, перпендикулярные чему-то (в данном случае - перпендикулярные воображаемой поверхности, проходящей через все точки непрерывной сетки)

Добавлено через 3 минуты

Не по теме:

извиняюсь, не заметил кто топикстартер

1
09.12.2017, 13:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2017, 13:58
Помогаю со студенческими работами здесь

Парсинг большого текстового файла
Приветствую! Вопрос вот в чем - Как открыть файл и прочесть содержимое разделив его на итемы....

Парсинг полного имени файла
создаю эмулятор командной строки в ДОС, который будет выполнять вводимые команды типа создания,...

Парсинг xml файла любой вложенности
Здравствуйте! Необходимо распарсить xml документ и прочитать его свойства, построить дерево и на...

Парсинг URL - получение имени файла
Всем вечер добрый. Господа программисты, подскажите пожалуйста как мне из такого пути получить имя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru