Разобрать файл OBJ, чтобы получить нормали вершин?

Я хочу иметь возможность загружать файлы OBJ, включая нормальные вершины. Но я быстро столкнулся с проблемой, когда Blender дает мне 1 нормаль на грань, и я не понимаю, как я могу связать это с моими вершинами.

Вот файл obj:

# Blender v2.78 (sub 0) OBJ File: ''
# www.blender.org
o Cube
v 1.000000 -1.000000 -0.555273
v 1.000000 -1.000000 1.444727
v -1.000000 -1.000000 1.444726
v -1.000000 -1.000000 -0.555274
v 1.000000 1.000000 -0.555273
v 0.999999 1.000000 1.444727
v -1.000000 1.000000 1.444726
v -1.000000 1.000000 -0.555273
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
s off
f 1//1 3//1 4//1
f 8//2 6//2 5//2
f 5//3 2//3 1//3
f 6//4 3//4 2//4
f 3//5 8//5 4//5
f 1//6 8//6 5//6
f 1//1 2//1 3//1
f 8//2 7//2 6//2
f 5//3 6//3 2//3
f 6//4 7//4 3//4
f 3//5 7//5 8//5
f 1//6 4//6 8//6

И параметры Параметры для экспорта в OBJ

Si Есть куб с 6 гранями, 8 вершинами, 12 треугольниками и 6 нормальными вершинами. Как сделать связь между вершиной и гранью. Я думал, что будет проще с одним VN на вершину. И в примерах, которые я видел в Интернете, это было.

Но здесь мне нужно выяснить, как сделать связь между ними, поэтому я думаю, что мне придется продублировать две вершины, так как для каждой грани нормаль будет разной.

РЕДАКТИРОВАТЬ: Решено, я неправильно понял, как был написан многоугольник. Каждая пара - это пара вершин pos/vertex normal


person florent teppe    schedule 16.08.2017    source источник
comment
Я не понимаю. Если вы хотите, чтобы каждая вершина имела уникальную нормаль, вам придется создать уникальную вершину для каждой грани. Таким образом, вам нужно иметь nFaces * 3 вершины, каждая с позицией и нормалью. Нет никакого способа обойти это.   -  person zero298    schedule 16.08.2017
comment
Вам нужно будет преобразовать этот файл в структуру памяти, подходящую для вашего приложения, дублируя информацию там, где это необходимо.   -  person Amadeus    schedule 16.08.2017
comment
@ Rabbid76 Хорошо, это та часть, которую я пропустил, хотя она должна была показать порядок вершин. Поэтому я думаю, что буду дублировать вершины, когда их нормальное изменение изменится от одного использования к другому. Большое спасибо.   -  person florent teppe    schedule 16.08.2017


Ответы (1)


Решено, я неправильно понял, как пишется многоугольник. Каждая пара - это пара вершин pos//вершина нормаль.

Чтобы построить мою модель, мне нужно создать новые вершины, когда одна и та же вершина имеет разные нормали, чтобы иметь возможность правильно отправить ее в openGL.

Потому что в openGL на одну вершину приходится одна нормаль, а в obj файле нет. Поэтому я должен адаптировать файл OBJ к моей модели данных.

person florent teppe    schedule 16.08.2017