纹理/顶点的不同索引数组

时间:2011-05-01 01:52:21

标签: android opengl-es blender texture-mapping .obj

我试图在Android中绘制一个地球仪,我使用OpenGL。然而,为了更容易理解,我将从制作一个简单的3D立方体开始。我使用Blender创建我的3D对象(立方体)并在我打开它以获得纹理坐标(vt)后将其导出为.obj文件。问题是我获得了8个不同的顶点和9个不同的纹理坐标。

  

v 1.000000 -1.000000 -1.000000
  v 1.000000 -1.000000 1.000000
  v -1.000000 -1.000000 1.000000
  v -1.000000 -1.000000 -1.000000
  v 1.000000 1.000000 -1.000000
  v 0.999999 1.000000 1.000001
  v -1.000000 1.000000 1.000000
  v -1.000000 1.000000 -1.000000
  vt 0.000000 0.000000
  vt 0.000000 -1.000000
  vt -1.000000 -1.000000
  vt -1.000000 0.000000
  vt 0.000000 1.000000
  vt 1.000000 1.000000
  vt 1.000000 0.000000
  vt -1.000000 1.000000
  vt 1.000000 -1.000000

因此,我也得到了一个真正搞乱的指数设置,这使得无法重新排列纹理坐标的位置以匹配顶点中的位置。

  

f 5/1 1/2 4/3
  f 5/1 4/3 8/4
  f 3/1 7/5 8/6
  f 3/1 8/6 4/7
  f 2/1 6/5 3/4
  f 6/7 7/1 3/2
  f 1/1 5/5 2/4
  f 5/7 6/1 2/2
  f 5/5 8/8 6/1
  f 8/1 7/2 6/9
  f 1/1 2/2 3/3
  f 1/1 3/3 4/4

由于现在我只能使用一个数组作为索引,因为一个顶点由顶点和纹理坐标组成。因此,我需要稍微重新安排其中一个v / vt阵列。但我不能,因为如果我将vt(在位置1)移动到位置5(第一行面),我将需要再次移动它以使其一直通过indices数组。

所以基本上我想知道这是程序“Blender”的问题,还是有解决方案,我可以申请。

1 个答案:

答案 0 :(得分:2)

你所拥有的是完全正常的,事实上,如果立方体被正确打开,我希望看到超过9个纹理坐标。如果以一种常见的方式完成一个立方体将被解开,你应该真的有12个vts我相信。

整个顶点通常由它的xyz坐标组成,以及它的法线和纹理坐标。如果所有这些部分都相同,则单个Vertex只能保存一个索引位置(与OpenGL中的索引数组相对)。如果您查看面的定义方式,它们由包含v和vt的顶点组成。如果你也有法线,他们还有一个额外的数字来表示每个正常使用(或OBJ导出中的vn行)。在面部中,采用Vertex 5 / 1,5 / 5和5/7。 xyz坐标是相同的,但纹理坐标不是。这是因为在展开时,3D空间中的相同点出现在UV /图像编辑器的3个位置。因此,OpenGL方面的索引数组中将有3个单独的索引。