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

标签 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(第一行面),我将需要再次移动它以使其一直通过索引数组。

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

最佳答案

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

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

关于android - 纹理/顶点的不同索引数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5845855/

相关文章:

iphone - 是否有适用于 iPhone 和/或 Android 手机的好的 OCR API?

android - 找不到处理 Intent 的 Activity { act=android.intent.action.EDIT typ=vnd.android.cursor.item/event

python - 如何在 Moderngl EGL 后端启用抗锯齿?

python - 无法构建 blender

javascript - 如何使用 3.JS 和 Leap Motion 制作心跳?

three.js - Blender 导出到 Three.js。所有 Material 均具有相同的灰色

javascript - React Native - `require()`语句异常处理

android - Android NDK-运行时未打包到APK

iphone - 使用 OpenGL ES 进行缩放和滑动

android - android中的球形过滤器