如何从DCC工具(如Blender)获得适当数量的顶点以在OpenGL ES中使用OBJ文件?

3
我听说如果我想在OpenGL ES应用程序中拥有颜色/纹理等,对于一个简单的立方体,我需要36个顶点。但是当我使用Blender将彩色立方体导出到OBJ格式时,我只得到了8个顶点,而且OBJ文件中甚至没有颜色数据,更不用说每个三角形中的每个顶点都需要法线(总共需要36个法线)。
以下是一个被涂上不同颜色的立方体的OBJ文件内容:
# Blender v2.56 (sub 0) OBJ File: ''
# www.blender.org
mtllib untitled.mtl
o Cube
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 0.999999 1.000000
v 0.999999 -1.000001 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 1.000000 1.000000
vn 0.666646 0.666646 0.333323
vn 0.408246 0.408246 -0.816492
vn -0.408246 0.816492 -0.408246
vn -0.666646 0.333323 0.666646
vn -0.577349 -0.577349 -0.577349
vn -0.577349 -0.577349 0.577349
vn 0.816492 -0.408246 -0.408246
vn 0.333323 -0.666646 0.666646
usemtl Material
s 1
f 5//1 1//2 4//3
f 5//1 4//3 8//4
f 3//5 7//6 8//4
f 3//5 8//4 4//3
f 2//7 6//8 3//5
f 6//8 7//6 3//5
f 1//2 5//1 2//7
f 5//1 6//8 2//7
f 5//1 8//4 6//8
f 8//4 7//6 6//8
f 1//2 2//7 3//5
f 1//2 3//5 4//3

这是MTL文件的内容:

# Blender MTL File: ''
# Material Count: 1
newmtl Material
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
1个回答

3

一个立方体不需要36个顶点。虽然可能存在,但并不必要。

顶点是空间中的一种坐标,由x、y、z三个参数构成。
一个立方体有8个角落,因此应该只有8个顶点。

在顶点之后,是通过Blender进行UV贴图获得的纹理坐标

在纹理坐标之后,是索引,它们连接顶点的顺序决定了立方体绘制的顺序。

最后,是用于光照效果的法线向量



在Blender中导出时,请确保仅突出显示以下内容:

上下文:
所有场景

输出选项:
三角剖分、材料、UV、法线向量、HQ

将Blender对象作为OBJ文件:
对象

这会给你两个文件:OBJMTL

MTL包含有关纹理图像的信息
OBJ包含:

顶点的形式如下:
v x, y, z
v x, y, z

纹理坐标的形式如下:
vt x, y
vt x, y

索引的形式如下:
f i/j k/l m/n
f i/j k/l m/n

成功获取导出的OBJ和MTL文件后,将它们与纹理图像一起添加到您的项目中,并使用OpenGLOBJLoader类在iOS中呈现它们。


我选择了你指定的选项,但我仍然得到8个顶点和8个法线。我已经发布了文件的内容。 - ace
1
你的模型似乎没有贴图。 - erkanyildiz
@erkanyildiz,你知道如何查找/删除这些行吗?我在导出的obj文件中得到了“l 5396 5386”等内容。 - June Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接