Android opengl es 2.0纹理坐标

Android opengl es 2.0纹理坐标,android,opengl-es,opengl-es-2.0,.obj,wavefront,Android,Opengl Es,Opengl Es 2.0,.obj,Wavefront,我已经为android编写了一个简单的模型查看器,它解析.obj波前文件以创建3d模型。我正在导出一个简单的icosphere,它使用blender提供的uv贴图进行纹理处理,该贴图采用这种格式 v 0.000000 -1.000000 0.000000 v 0.723600 -0.447215 0.525720 v -0.276385 -0.447215 0.850640 . . . v -0.723600 0.447215 -0.525720 v 0.276385 0.447215 -0.8

我已经为android编写了一个简单的模型查看器,它解析.obj波前文件以创建3d模型。我正在导出一个简单的icosphere,它使用blender提供的uv贴图进行纹理处理,该贴图采用这种格式

v 0.000000 -1.000000 0.000000
v 0.723600 -0.447215 0.525720
v -0.276385 -0.447215 0.850640
.
.
.
v -0.723600 0.447215 -0.525720
v 0.276385 0.447215 -0.850640
v 0.894425 0.447215 0.000000
vt 0.238062 0.172144
vt 0.314133 0.212645
vt 0.264721 0.263452
.
.
.
vt 0.176955 0.098382
vt 0.327646 0.115775
vt 0.361262 0.040083
f 103/1 15/2 48/3
f 48/3 44/4 103/1
f 13/5 103/1 44/4
.
.
.
f 47/12 105/8 46/10
f 14/9 46/10 105/8
f 105/8 47/12 15/2
“v”表示顶点,“vt”表示纹理坐标,“f”表示面,正斜杠前的值为顶点对应的索引,斜杠后的值为纹理坐标对应的索引。我的问题是,我不确定如何将纹理坐标索引输入到opengl es中,因此我当前的模型看起来非常奇怪,因为纹理坐标不匹配


OBJ定义纹理中位于左上角的原点。OpenGL将其定义为位于左下角。您需要反转来自OBJ的y坐标

编辑:为了回应我对克里斯蒂安·劳(Christian Rau)以下部分的怀疑,出于OpenGL的目的,并将属性限制为您实际使用的属性,顶点是位置和纹理坐标的组合。这是两件事的结合。您可能会认为它们在逻辑上是不同的,但OpenGL没有。您可能会回答“哪个OBJ顶点位于传递给OpenGL的列表中的条目23?”这样的问题,答案是“它是顶点46/10”

加载时实现这一点的一种方法是通过任何字典子类(例如Hashtable)。当遇到需要使用vertex 46/10时,您需要创建一个合适的复合键,并检查哈希表中是否有到OpenGL数组索引位置的映射。如果你找不到,你应该分配下一个可用的索引位置,并在字典中存储一条记录

因此,从你的问题来看:

f 103/1 15/2 48/3
f 48/3 44/4 103/1
f 13/5 103/1 44/4
.
.
.
f 47/12 105/8 46/10
f 14/9 46/10 105/8
f 105/8 47/12 15/2

产生十个顶点,这些顶点是103/1、13/5、48/3、44/4、15/2、47/12、105/8、46/10、14/9和46/10。你是说他问题中的图像显示了垂直翻转的正确纹理?我很乐观。纹理坐标已根据问题自动展开,因此没有理由假设它看起来应该是颠倒的。我将添加一个关于OpenGL顶点的讨论,因为您显然对此持怀疑态度,并且我看到您在其他问题上给出了非常好的答案。