2010-01-8

away3d中的obj

利用away3d包导入obj模型,对obj和对应的mtl文件有以下要求:

obj文件只能读入f,v,vt,g标签和usemtl标签

f 面 (Face)

v 几何体顶点 (Geometric vertices)

vt 贴图坐标点 (Texture vertices)

g 组名称 (Group name)

usemtl 材质名称 (Material name)

因此其他的数据是没有被读入的。

obj文件如下:



# The units used in this file are centimeters.
g default
v -0.500000 -0.500000 0.500000
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 2.000000
vt 1.000000 2.000000
vt 0.000000 3.000000
vt 1.000000 3.000000
vt 0.000000 4.000000
vt 1.000000 4.000000
vt 2.000000 0.000000
vt 2.000000 1.000000
vt -1.000000 0.000000
vt -1.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 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 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 -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 -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
s off
g pCube1
usemtl initialShadingGroup
f 1/1/1 2/2/2 4/4/3 3/3/4
f 3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14 2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20
f 7/13/21 1/1/22 3/3/23 5/14/24


上面的s表示光滑组,既然不读入,就不管它

解释一下f  7/13/21 1/1/22 3/3/23 5/14/24

四组代表是四边形,网格一般由三角形或者四边形组成,只有三组就代表三角形网格。每组数据用“/”分割了三个数,即是f  v/vt/vn

第一个是点v的索引值,如7代表v中的第7行数据(v -0.500000 -0.500000 -0.500000),第二个为贴图坐标vt的索引值,如13代表vt中的第十三行数据

(vt -1.000000 0.000000),第三个代表法向量vn的索引值,没读入,不管它。

如上面的usemtl标签,说明此obj使用了mtl材质文件,对mtl的要求:

只读入了两个标签

newmtl

map_Kd

mtl文件如下:


newmtl Material__1662009285
Kd 0.58800000 0.58800000 0.58800000
Ka 0.58800000 0.58800000 0.58800000
Ks 0.00000000 0.00000000 0.00000000
Ns 9.99999905
Tr 1.00000000
map_Kd 14CompleteMap.jpg
map_Ka 14CompleteMap.jpg

newmtl gfdgd
Kd 1.00000000 1.00000000 1.00000000
Ka 1.00000000 1.00000000 1.00000000
Ks 0.00000000 0.00000000 0.00000000
Ns 9.99999905
Tr 1.00000000
map_Kd langan.jpg
newmtl Material__1662008503
Kd 0.58800000 0.58800000 0.58800000
Ka 0.58800000 0.58800000 0.58800000
Ke 0.58800000 0.58800000 0.58800000
Ks 0.00000000 0.00000000 0.00000000
Ns 9.99999905
Tr 1.00000000
map_Kd 24606_273866.jpg
map_Ka 24606_273866.jpg
map_Ke 24606_273866.jpg

上面的数据其实起作用的就只有

newmtl Material__1662009285
map_Kd 14CompleteMap.jpg
newmtl gfdgd
map_Kd langan.jpg
newmtl Material__1662008503
map_Kd 24606_273866.jpg


newmtl标签后面的名称和obj文件中usemtl标签的名称一致,这样就把obj的贴图和mtl中记录的材质联系起来了

2 条评论

  • 太谢谢你了,你写的东西对我有很大帮助。但是我还是有一个问题,我用3DSMAX导出的mtl文件怎么没有找到map_Kd 和map_Ka这两个标签

  • 是贴图路径的问题,我已经解决了

说点啥吧