Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
defer3
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 3
#1

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

22.09.2017, 15:13. Просмотров 235. Ответов 6
Метки 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++):

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

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

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

Считывание и парсинг текста из файла - C++ Builder
Задание таково: У нас есть созданный файл где забита база от такого построчного формата(D-Date="02.05.2014...

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

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

6
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
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
Сообщений: 3
24.09.2017, 22:37  [ТС] #3
да по 3 я это знаю, но как у треугольника одна нормаль, как они могут в разные стороны смотреть это же бред
0
Bretbas
Каждому свое
348 / 118 / 31
Регистрация: 05.08.2013
Сообщений: 1,245
Завершенные тесты: 1
25.09.2017, 08:20 #4
defer3,
Цитата Сообщение от defer3 Посмотреть сообщение
да по 3 я это знаю, но как у треугольника одна нормаль, как они могут в разные стороны смотреть это же бред
А как вы узнаете, что конкретно эта вершина, принадлежит именно этому треугольнику? Вершина может принадлежать нескольким треугольникам сразу, поэтому какие бы вы треугольники не брали, смежные вершины будут иметь разные нормали.
Перед пиксельным шейдером все равно все растеризуется...
0
woldemas
243 / 144 / 57
Регистрация: 06.09.2013
Сообщений: 484
25.09.2017, 18:32 #5
defer3, это нормали не плоского треугольника, это нормали точек поверхности, которые являются вершинами вашего треугольника. У поверхности нормаль в каждой точке, в общем случае, разная.
0
Evg
Эксперт CАвтор FAQ
18258 / 6383 / 440
Регистрация: 30.03.2009
Сообщений: 17,664
Записей в блоге: 28
25.09.2017, 19:57 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Bretbas Посмотреть сообщение
Так вот, нормаль в вершине, это перпендикур к плоскости, которую образовали 3 вершины - треугольник
То, что ты описал, это нормаль к плоскости треугольника

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

Добавлено через 1 минуту
Цитата Сообщение от Bretbas Посмотреть сообщение
Перед пиксельным шейдером все равно все растеризуется...
Нормаль в вершинах треугольника используется, например, для того, чтобы вычислить нормаль в каждой точке растеризованного треугольника и затем вычислить правильное освещение или углы отражения
3
defer3
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 3
26.09.2017, 01:15  [ТС] #7
спасибо, теперь всё понятно
0
26.09.2017, 01:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2017, 01:15
Привет! Вот еще темы с ответами:

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

Ошибка .OBJ - C++ Builder
Всем привет, прошу о помощи, пожалуйста, очень надо. Вот архив с курсовой там выдает 2 ошибки .OBJ, не могу решить и преподы тоже.

Удаление старого .obj - C++ Builder
Доброго дня. Просмотрел темы на форуме, но ответа не нашел. После переустановки студии (xe2) вылетает ошибка Fatal: Unable to open...

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


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

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

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