Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
defer3
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 4
#1

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

22.09.2017, 15:13. Просмотров 420. Ответов 9
Метки c++, obj (Все метки)

при парсенге файла столкнулся с серьёзной проблемой, а именно у треугольника три нормали
пример:
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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2017, 15:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Парсинг .obj файла (C++):

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

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

Объектные файлы *.obj, *.o - они случайно не кроссплатформенные? Если нет, то реальна ли конвертация?
Объясню подробнее, о чем я. Пишем простой код на си, без всяких платформо- и...

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

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

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

9
Bretbas
Каждому свое
518 / 204 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
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
defer3
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 4
24.09.2017, 22:37  [ТС] #3
да по 3 я это знаю, но как у треугольника одна нормаль, как они могут в разные стороны смотреть это же бред
0
Bretbas
Каждому свое
518 / 204 / 81
Регистрация: 05.08.2013
Сообщений: 1,610
Завершенные тесты: 2
25.09.2017, 08:20 #4
defer3,
Цитата Сообщение от defer3 Посмотреть сообщение
да по 3 я это знаю, но как у треугольника одна нормаль, как они могут в разные стороны смотреть это же бред
А как вы узнаете, что конкретно эта вершина, принадлежит именно этому треугольнику? Вершина может принадлежать нескольким треугольникам сразу, поэтому какие бы вы треугольники не брали, смежные вершины будут иметь разные нормали.
Перед пиксельным шейдером все равно все растеризуется...
0
woldemas
347 / 248 / 153
Регистрация: 06.09.2013
Сообщений: 795
25.09.2017, 18:32 #5
defer3, это нормали не плоского треугольника, это нормали точек поверхности, которые являются вершинами вашего треугольника. У поверхности нормаль в каждой точке, в общем случае, разная.
0
Evg
Эксперт CАвтор FAQ
18938 / 6899 / 513
Регистрация: 30.03.2009
Сообщений: 19,436
Записей в блоге: 30
25.09.2017, 19:57 #6
Лучший ответ Сообщение было отмечено defer3 как решение

Решение

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

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

Добавлено через 1 минуту
Цитата Сообщение от Bretbas Посмотреть сообщение
Перед пиксельным шейдером все равно все растеризуется...
Нормаль в вершинах треугольника используется, например, для того, чтобы вычислить нормаль в каждой точке растеризованного треугольника и затем вычислить правильное освещение или углы отражения
3
defer3
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 4
26.09.2017, 01:15  [ТС] #7
спасибо, теперь всё понятно
0
mypostchampagne
0 / 0 / 0
Регистрация: 25.08.2017
Сообщений: 1
09.12.2017, 00:19 #8
Народ, где помощь?!
0
defer3
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 4
09.12.2017, 00:30  [ТС] #9
так вроде всё объяснили
0
TRam_
зомбяк
598 / 603 / 190
Регистрация: 14.05.2017
Сообщений: 2,036
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.12.2017, 13:58
Привет! Вот еще темы с решениями:

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

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

Парсинг структуры файла *.obj
Доброго времени суток, посетители форума cyberforum.ru. Возникла проблема с...

Структура .obj-файла
Подскажите какую нибудь нормальную документацию по файлу .obj (3d). Необходимо...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru