2015-09-29 5 views
2

Я использовал Assimp некоторое время, и теперь я пытаюсь загрузить файл .obj. Он загружается отлично, но я хотел бы манипулировать данными лица после его загрузки.Assimp лица индексы

В принципе у меня есть это в простой файл cube.obj (Полный файл - http://pastebin.com/ha3VkZPM)

# 8 Vertices 
v -1.0 -0.003248 1.0 
v 1.0 -0.003248 1.0 
v -1.0 1.996752 1.0 
v 1.0 1.996752 1.0 
v 1.0 -0.003248 -1.0 
v -1.0 -0.003248 -1.0 
v 1.0 1.996752 -1.0 
v -1.0 1.996752 -1.0 


# 36 Texture Coordinates 
vt 1.0 0.0 
vt 0.0 0.0 
... 

# 36 Vertex Normals 
vn 0.0 0.0 1.0 
vn 0.0 0.0 1.0 
... 

f 1/1/1 2/2/2 3/3/3 
f 2/4/4 4/5/5 3/6/6 
f 5/7/7 6/8/8 7/9/9 
f 6/10/10 8/11/11 7/12/12 
f 3/13/13 6/14/14 1/15/15 
f 3/16/16 8/17/17 6/18/18 
f 7/19/19 2/20/20 5/21/21 
f 7/22/22 4/23/23 2/24/24 
f 3/25/25 7/26/26 8/27/27 
f 3/28/28 4/29/29 7/30/30 
f 2/31/31 6/32/32 5/33/33 
f 2/34/34 1/35/35 6/36/36 

И, как я понимаю, вход лицо V/T/N (Vertex indicies, текс Корд индексы и нормальные показатели).

так f 1/1/1 2/2/2 3/3/3 представляет собой треугольник вершин (1,2,3) - правый?

Из этой записи лица - я хочу извлечь только индексы вершин.

Сейчас входит Assimp - я это сейчас - Где Indices это СТЛ :: вектор

for (uint32 i = 0; i < pMesh->mNumFaces; i++) { 
    const aiFace& Face = pMesh->mFaces[i]; 
    if(Face.mNumIndices == 3) { 
     Indices.push_back(Face.mIndices[0]); 
     Indices.push_back(Face.mIndices[1]); 
     Indices.push_back(Face.mIndices[2]); 

} 

Вот значения pMesh->mNumFace = 12 - Так вот правильно.

(for 1st face) 
Face.mindices[0] should probably point to 1/1/1 
Face.mindices[1] should probably point to 2/2/2 
Face.mindices[2] should probably point to 3/3/3 

Теперь, как извлечь только индексы вершин? И когда я проверяю значения Face.mIndices[0] its index as 0,1,2...respectively. Почему? Assimp Faces all have indices (0,1,2)

Я искал в Google и StackOverflow - вот некоторые похожие вопросы, но я не могу понять, как это понять.

https://stackoverflow.com/questions/32788756/how-to-keep-vertex-order-from-obj-file-using-assimp-library

Assimp and D3D model loading: Mesh not being displayed in D3D

Assimp not properly loading indices

Пожалуйста, дайте мне знать, если вам нужно больше информации. Благодарю.

+0

Возникает вопрос: «Почему у алиментов только один индекс вместо трех?»? – BDL

+0

Предполагая, что 'MIndices' Assimp' представляют собой индекс лица. Следовательно, 'mIndices [0]' должен указывать на первый V/T/N из f1 (f1 = 1/1/1 2/2/2 3/3/3), т.е. 1/1/1. Но вместо этого 'Face.mIndices [0] - {0}'. Как извлечь индекс вершин (первый 1 из 1/1/1) из него. – petradragon4

+0

Assimp передает формат obj и создает уникальные вершины в соответствии с требованиями OpenGL/DirectX. Это означает, что каждая отдельная комбинация вершинно-texcoord-normal создаст новую вершину, а индексы аферитов указывают на этот вновь созданный список. Насколько я знаю, нет возможности получить доступ к исходной позиции/texcoord/normal index. – BDL

ответ

0

OpenGL и DirectX используют несколько иной способ индексирования данных вершин, чем это делает формат obj. В отличие от формата файла, где можно использовать разные индексы для позиций/texcoords и т. Д., Для графической карты требуется один буфер индекса для всей вершины.

Это означает, что Assimp передает формат obj и преобразует его в представление с одним индексом-буфером. В основном это означает, что каждая уникальная комбинация вершинно-texcoord-normal будет давать одну вершину, в то время как indexbuffer указывает на этот новый список вершин.

Насколько я знаю, доступ к исходным показателям с помощью Assimp невозможен.