Assimp面是指数

Assimp faces indices

本文关键字:指数 Assimp      更新时间:2023-10-16

我已经使用Assimp一段时间了,现在我试图加载一个。obj文件。它加载得很完美,但我想在加载后操纵面部数据。

基本上我在简单立方体中有这个。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

据我所知,face entry是V/T/N(顶点指数、顶点指数和法线指数)。

f 1/1/1 2/2/2 3/3/3表示顶点(1,2,3)的三角形,对吧?

从这个面条目-我只想提取顶点索引。

现在进入Assimp -我现在有这个-其中Indices是stl::向量

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面都有索引(0,1,2)

我搜索了谷歌和StackOverflow -这里有一些类似的问题,但我似乎不能弄清楚。

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

Assimp和D3D模型加载:网格不显示在D3D

加载索引不正确

如果你需要更多的信息,请告诉我。谢谢。

OpenGL和DirectX使用与obj格式稍微不同的索引顶点数据的方式。在文件格式中,可以为位置/文本坐标等使用不同的索引,而图形卡需要为整个顶点使用一个单一的索引缓冲区。

也就是说:simp传递obj格式并将其转换为单索引缓冲区表示。这基本上意味着,当indexbuffer指向这个新的顶点列表时,每个唯一的顶点-文本-法线组合将给出一个顶点。

据我所知,不能使用Assimp访问原始索引