【问题标题】:Different indices array for texture/vertices纹理/顶点的不同索引数组
【发布时间】:2011-08-16 07:04:28
【问题描述】:

我试图在 Android 中绘制一个地球仪,为此我使用了 OpenGL。然而,为了更容易理解,我将从制作一个简单的 3D 立方体开始。我使用 Blender 创建我的 3D 对象(立方体),并在解包后将其导出为 .obj 文件以获取纹理坐标(vt)。问题是我得到了 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(第一行面),我需要再次移动它以使其一直通过索引数组。

所以基本上我想知道这是否是程序“Blender”的问题,或者是否有我可以应用的解决方案。

【问题讨论】:

  • 据我所知,Blender OBJ 导出脚本工作正常。您使用的是 2.49 还是 2.57?
  • 我使用的是 2.57。但是,我得到一个 vt 然后我得到 v,这似乎有点奇怪吗?
  • 一点也不,这完全取决于你如何打开它。你可以再吃几个。我将尝试发布答案,因为我已经解决了从 Blender 到 OBJ 格式再到 OpenGL ES 的数组的问题,不管你信不信,对于 Android。

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


【解决方案1】:

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

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

【讨论】:

  • 和?这不是答案
猜你喜欢
  • 1970-01-01
  • 2011-12-09
  • 2013-07-16
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多