3

有人告诉我,对于一个简单的立方体,当我想为 OpenGL ES 应用程序提供颜色/纹理等时,我需要 36 个顶点,但是当我使用 Blender 将彩色立方体导出为 OBJ 格式时,我只得到 8 个顶点,而且我没有甚至在 OBJ 中获取颜色数据更不用说我在 OBJ 文件中只得到 8 条法线,但我需要每个三角形中每个顶点的法线(总共 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
4

1 回答 1

3

立方体的 36 个顶点是不正确的。可能但不必要。

顶点是空间中的一种坐标,由 3 个参数 x、y、z 组成。
由于立方体有 8 个角,那么应该只有 8 个顶点。

在顶点之后,有纹理坐标,这是在 Blender 中进行 UV 映射后获得的。

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

最后,还有灯光效果的法线



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

背景
所有场景

输出选项
三角剖分、材质、UV、法线、HQ

Blender 对象作为 OBJ :
对象

这为您提供了两个文件:OBJMTL

MTL 包含纹理图像信息
,OBJ 包含:

顶点形式为:
vx, y, z
vx, y, z

纹理坐标形式为:
vt x, y
vt x, y

索引形式为:
fi/jk/lm/n
fi/jk/lm/n

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

于 2011-02-20T00:59:31.123 回答