【发布时间】: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