Импорт 3DS MAX OBJ с использованием C ++
Вопрос
Я создал загрузчик OBJ, который может импортировать файлы .OBJ, которые были экспортированы из 3DS Max в мое простое просмотр / приложение OpenGL. В основе этого был вектор.
Это отлично сработало на паре моделей, которые я использовал, но тот, с которым я хочу работать, имеет что -то другое, что не учитывалось. Он имеет 4 балла в своих вершинах вместо 3. Вот образец линии, с которой я работаю:
g Box02
usemtl Wood_Bark
s 4
f 1/1/1 2/2/1 3/3/1 4/4/2
f 4/1/3 3/2/3 5/3/3
Первая линия «F» имеет 4 вершины, которые меня интересуют. Моя Vertex3.h берет X, Y, Z. В других моделях, которые у меня были, все строки были похожи на вторую линию «F», с 3 элементами. Я получаю вершину из диапазона, поэтому, когда я пошел проверить, где это происходит, я увидел, что она была на этой линии, поэтому я предположил, потому что на линии есть больше данных, которые можно обработать. Вот вся вершина3.h
И это строка кода, которая терпит неудачу. Вершины - вектор3.
tempVertices.push_back ( vertices[--vertex] );
У меня вопрос, что такое 4 -й пункт? Как бы вы объяснили это в чем -то вроде моего файла Vector3.h? Похоже, мне нужно создать вектор44.h и игнорировать 4 -й VAR, если на линии есть только 3. Но я хотел бы узнать больше о том, с чем я имею дело, и о любых советах о том, как это сделать. 4 -й элемент альфа или что -то в этом роде? Как это следует использовать, или это следует использовать вообще в моих расчетах в Vector3.h?
Решение
Лицо с четырьмя очками называется Quad. Обычно, если вы хотите сделать это, вы должны разбить его на два треугольника.
Так, например, у вас есть это:
___
| |
| |
|___|
Вам нужно превратить это в это:
___
|\ |
| \ |
|__\|
Предполагая, что вершины идут против часовой стрелки (по умолчанию в OpenGL), начиная с верхнего левого, вы можете сделать два треугольника. Вершины первого треугольника станут первым, вторым и третьим вершинами Quad. Второй вершины треугольника станут третьим, четвертым и первым вершином четвертого квадрата.
Другие советы
Почему бы вам не экспортировать только треугольники? Преобразовать в EMESH в 3DS MAX, сделайте все края видимыми, экспорт. Или просто используйте соответствующую опцию экспорта OBJ.