Opengl es Android中使用的OBJ文件中的纹理坐标

Opengl es Android中使用的OBJ文件中的纹理坐标,opengl-es,Opengl Es,我有一个纹理立方体的OBJ文件: # Max2Obj Version 4.0 Mar 10th, 2001 # mtllib cube2.mtl g # object Cube_1 to come ... # v -5.500000 0.000000 -1.000000 v -5.500000 0.000000 1.000000 v -7.500000 0.000000 1.000000 v -7.500000 0.000000 -1.000000 v -5.500000 2.0000

我有一个纹理立方体的OBJ文件:

# Max2Obj Version 4.0 Mar 10th, 2001
#
mtllib cube2.mtl
g
# object Cube_1 to come ...
#
v  -5.500000 0.000000 -1.000000
v  -5.500000 0.000000 1.000000
v  -7.500000 0.000000 1.000000
v  -7.500000 0.000000 -1.000000
v  -5.500000 2.000000 -1.000000
v  -5.500000 2.000000 1.000001
v  -7.500000 2.000000 1.000000
v  -7.500000 2.000000 -1.000000
v  -5.500000 0.000000 -1.000000
v  -5.500000 2.000000 -1.000000
v  -5.500000 2.000000 1.000001
v  -5.500000 0.000000 -1.000000
v  -5.500000 2.000000 1.000001
v  -5.500000 0.000000 1.000000
v  -5.500000 0.000000 1.000000
v  -5.500000 2.000000 1.000001
v  -7.500000 2.000000 1.000000
v  -5.500000 0.000000 1.000000
v  -7.500000 2.000000 1.000000
v  -7.500000 0.000000 1.000000
v  -7.500000 0.000000 1.000000
v  -7.500000 2.000000 1.000000
v  -7.500000 2.000000 -1.000000
v  -7.500000 0.000000 1.000000
v  -7.500000 2.000000 -1.000000
v  -7.500000 0.000000 -1.000000
v  -5.500000 2.000000 -1.000000
v  -5.500000 0.000000 -1.000000
v  -7.500000 0.000000 -1.000000
v  -5.500000 2.000000 -1.000000
v  -7.500000 0.000000 -1.000000
v  -7.500000 2.000000 -1.000000
# 32 vertices

vt  0.000500 0.999500 0.000500
vt  0.000500 0.000500 0.000500
vt  0.999501 0.000500 0.000500
vt  0.999501 0.999500 0.000500
vt  0.999500 0.999500 0.999501
vt  0.999500 0.000500 0.999501
vt  0.000499 0.000500 0.999501
vt  0.000499 0.999500 0.999501
vt  0.999500 0.000500 0.999500
vt  0.999500 0.999501 0.999500
vt  0.000500 0.999501 0.999500
vt  0.999500 0.000500 0.999500
vt  0.000500 0.999501 0.999500
vt  0.000500 0.000500 0.999500
vt  0.999500 0.000500 0.000500
vt  0.999500 0.999501 0.000500
vt  0.000499 0.999501 0.000500
vt  0.999500 0.000500 0.000500
vt  0.000499 0.999501 0.000500
vt  0.000499 0.000500 0.000500
vt  0.999500 0.000500 0.000499
vt  0.999500 0.999501 0.000499
vt  0.000500 0.999501 0.000499
vt  0.999500 0.000500 0.000499
vt  0.000500 0.999501 0.000499
vt  0.000500 0.000500 0.000499
vt  0.000500 0.999501 0.999500
vt  0.000500 0.000500 0.999500
vt  0.999501 0.000500 0.999500
vt  0.000500 0.999501 0.999500
vt  0.999501 0.000500 0.999500
vt  0.999501 0.999501 0.999500
vt  0.000500 0.999500 0.000500
vt  0.999501 0.000500 0.000500
vt  0.999500 0.999500 0.999501
vt  0.000499 0.000500 0.999501
# 36 texture vertices

vn  0.000000 -1.000000 -0.000000
vn  0.000000 -1.000000 -0.000000
vn  0.000000 -1.000000 -0.000000
vn  0.000000 -1.000000 -0.000000
vn  0.000000 1.000000 -0.000000
vn  0.000000 1.000000 -0.000000
vn  0.000000 1.000000 -0.000000
vn  0.000000 1.000000 -0.000000
vn  1.000000 0.000000 -0.000000
vn  1.000000 0.000000 -0.000000
vn  1.000000 0.000000 -0.000000
vn  1.000000 0.000000 -0.000000
vn  1.000000 0.000000 -0.000000
vn  1.000000 0.000000 -0.000000
vn  -0.000000 -0.000000 1.000000
vn  -0.000000 -0.000000 1.000000
vn  -0.000000 -0.000000 1.000000
vn  0.000000 0.000000 1.000000
vn  0.000000 0.000000 1.000000
vn  0.000000 0.000000 1.000000
vn  -1.000000 0.000000 -0.000000
vn  -1.000000 0.000000 -0.000000
vn  -1.000000 0.000000 -0.000000
vn  -1.000000 0.000000 -0.000000
vn  -1.000000 0.000000 -0.000000
vn  -1.000000 0.000000 -0.000000
vn  0.000000 0.000000 -1.000000
vn  0.000000 0.000000 -1.000000
vn  0.000000 0.000000 -1.000000
vn  0.000000 0.000000 -1.000000
vn  0.000000 0.000000 -1.000000
vn  0.000000 0.000000 -1.000000
# 32 vertex normals

g Cube_1
usemtl 01_-_Default_1
s 0
f 1/33/1 2/2/2 3/34/3
f 1/1/1 3/3/3 4/4/4
f 5/35/5 8/8/8 7/36/7
f 5/5/5 7/7/7 6/6/6
f 9/9/9 10/10/10 11/11/11
f 12/12/12 13/13/13 14/14/14
f 15/15/15 16/16/16 17/17/17
f 18/18/18 19/19/19 20/20/20
f 21/21/21 22/22/22 23/23/23
f 24/24/24 25/25/25 26/26/26
f 27/27/27 28/28/28 29/29/29
f 30/30/30 31/31/31 32/32/32
# 12 faces

g
如您所见,vt每行有3个条目。这是否意味着它是3d纹理而不是2d纹理?Android只支持2d纹理。那么这是否意味着上面的OBJ文件在Android中无法工作?
我可以解析OBJ并获得float[]文本坐标=[0.000500,0.999500,0.000500,0.000500,0.000500,0.000500,…]这些是需要输入到OpenGL ES的正确的前2个tex坐标吗?或者我需要根据OBJ文件中的f数计算纹理坐标,其中AFAIK是纹理坐标的索引,以计算正确的纹理坐标。所以我不确定哪条路是正确的。有OpenGL ES和OBJ文件格式经验的人可以清除所有这些。

这个模型实际上使用的是3d纹理。有关obj文件格式的详细信息,请参见,以下是关于纹理坐标的部分:

vt u v w

多边形和自由形式几何体的顶点语句

指定纹理顶点及其坐标。一维纹理 仅需要u纹理坐标,2D纹理需要u和 和v纹理坐标,3D纹理需要这三个坐标 坐标

obj文件中的顶点数据不能直接传递到opengl。您必须设置数组,以便每个数组中的相应索引属于同一顶点。例如,模型(1/33/1)中第一个面的第一个顶点包括

  • 从第一条“v”线开始的顶点坐标
  • 纹理坐标来自33。“vt”行
  • 第一条“vn”线的法向量

为opengl设置此项的最简单方法是迭代所有面,获取顶点、纹理和法线的值,并将这些值附加到新数组中。

谢谢。我会检查一下,完成后会有反馈。我在最初的问题中解决了这个问题。现在正在处理更真实的OBJ文件,其中有多个usemtl语句,后面跟着更多的f语句和更多的v和vt vn语句。我不确定是否需要在同一缓冲区中累积每个新的v、vt、vn语句系列,或者为每个v、vt、vn语句系列创建单独的缓冲区?