Кто-нибудь может объяснить мне формат FBX? - PullRequest
5 голосов
/ 12 октября 2011

Я использую Notepad ++, чтобы увидеть структуру данных модели FBX, но у меня есть некоторые проблемы с пониманием этого. Вот некоторая информация о кубе (сторона = 10), расположенном в (0,0,0), кто-нибудь может сказать мне, что означают эти члены? СПАСИБО!

Vertices: *24 {
a: -5,-5,0,5,-5,0,-5,5,0,5,5,0,-5,-5,10,5,-5,10,-5,5,10,5,5,10
} 
PolygonVertexIndex: *36 {
a: 0,2,-4,3,1,-1,4,5,-8,7,6,-5,0,1,-6,5,4,-1,1,3,-8,7,5,-2,3,2,-7,6,7,-4,2,0,-5,4,6,-3
} 
Edges: *18 {
a: 0,1,2,3,4,6,7,8,9,10,13,14,16,19,20,25,26,32
} 
Normals: *108 {
a: 0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,-        1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-   1,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,1,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0,-1,0,0
} 

UV: *24 {
a: 0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1,0,0,1,0,0,1,1,1
} 
UVIndex: *36 {
a: 9,11,10,10,8,9,8,9,11,11,10,8,4,5,7,7,6,4,0,1,3,3,2,0,4,5,7,7,6,4,0,1,3,3,2,0
} 

Ответы [ 3 ]

9 голосов
/ 13 апреля 2012

Я думаю, что эти предположения вполне разумны, хотя я не уверен почему массив PolygonVertexIndex содержит отрицательные значения (кажется, каждый третий индекс каждого треугольника отрицателен). Может быть, чтобы указать последний индекс многоугольника, так что вы можете иметь многоугольники, которые не должны быть треугольники.

Тот, у которого отрицательное значение, действительно представляет последнюю вершину.

Чтобы узнать, что это за вершина ведьмы, вы должны отрицать ее и вычесть 1 из этого значения.

Например, -4 представляет 3 ((-4)*(-1) - 1)

8 голосов
/ 12 октября 2011

Даже не зная о формате FBX, вы можете, по крайней мере, сделать очень разумные предположения:

  1. 24 значения в Vertices - это 8 вершин куба (3 значения представляют одну вершину).

  2. 36 значений в PolygonVertexIndex - это индексы вершин (ссылающиеся на значения из Vertices) для 12 треугольников, составляющих 6 граней куба.

  3. 24 значения в Edges являются индексами вершин 12 ребер куба.

  4. 108 значений в Normals - это 36 нормалей для каждого из углов треугольника 12 треугольников (с 3 значениями, представляющими один вектор нормали).

  5. 24 значения в UV представляют собой 12 координат текстуры (2 значения представляют одну пару координат текстуры).

  6. 36 значений в UVIndex являются индексами координат текстуры (ссылаются на значения из UV) для 36 углов треугольника куба.

Я думаю, что эти предположения вполне разумны, хотя я не уверен, почему массив PolygonVertexIndex содержит отрицательные значения (кажется, что каждый третий индекс каждого треугольника отрицателен). Возможно, чтобы указать последний индекс многоугольника, чтобы у вас могли быть многоугольники, которые не обязательно должны быть треугольниками.

6 голосов
/ 24 апреля 2012

Отрицательный индекс вершины указывает конец многоугольника. Вы можете побитово отрицать отрицательный индекс, чтобы получить положительный.

В c это будет

posIndex = ~negIndex;
...