DirectX的OBJ模型加载与渲染

在之前的DirectX例子里我用的模型是.x文件,DirectX有一个方法D3DXLoadMeshFromX可以加载.x模型,但是这里有个问题,.x文件是没法用文本编辑器打开查看结构的,这里我来演示一下如何解析.obj模型.

首先让我们看一下.obj模型的组成部分以及结构,一个完整的obj模型一共分为三个部分:obj模型文件,mtl材质文件,纹理贴图;其中obj文件和mtl文件是可以用文本编辑器打开的,先打开obj文件,可以看到这样的内容:

v -3.000767 2.993211 2.014205
v -3.000767 -0.006789 2.014205
v -2.750767 2.993211 2.014205
v -2.750767 -0.006789 2.014205
v -2.750767 2.993211 2.014205
v -2.750767 -0.006789 2.014205
v -2.750767 2.993211 -1.985795
v -2.750767 -0.006789 -1.985795
v -2.750767 2.993211 -1.985795

vt 0.948633 0.500977
vt 0.948633 0.000977
vt 0.998633 0.500977
vt 0.998633 0.000977
vt 0.000000 0.500000
vt 0.000000 0.000000
vt 1.000000 0.500000
vt 1.000000 0.000000
vt 1.000000 0.501343
vt 0.000000 0.501343
vt 1.000000 0.438843

vn 0.000000 0.000000 1.000000
vn 1.000000 0.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn -1.000000 0.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn -0.000000 -0.707107 -0.707107
vn 0.000000 0.707107 0.707107
vn -0.000000 0.707107 -0.707106

g Left
usemtl wood
s 1
f 1/1/1 2/2/1 3/3/1
f 2/2/1 4/4/1 3/3/1
s 2
f 5/5/2 6/6/2 7/7/2
f 6/6/2 8/8/2 7/7/2
s 1
f 9/3/3 10/4/3 11/1/3
f 10/4/3 12/2/3 11/1/3
s 2
f 13/7/4 14/8/4 15/5/4
f 14/8/4 16/6/4 15/5/4
s 3
f 17/9/5 18/10/5 19/11/5
f 18/10/5 20/12/5 19/11/5
f 21/10/6 22/9/6 23/12/6
f 22/9/6 24/11/6 23/12/6

让我来解释一下字段:

首先v和其后三个值表示一个顶点的xyz坐标值;

vt和其后两个或者三个值表示顶点的纹理坐标uv(w);

vn和其后三个值表示顶点的法向量;

g表示一组面;

usemtl表示这个组用的mtl文件里那个材质的名称;

f及其后三组值表示一个面的三个 顶点/纹理/法线 在之前v,vt,vn集合里边的索引值.


打开mtl文件就会看到:

newmtl wood
illum 2
Kd 0.800000 0.800000 0.800000
Ka 0.200000 0.200000 0.200000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ns 0.000000
map_Ka house/house.bmp
map_Kd house/house.bmp

newmtl后面的是材质名对应obj文件usemtl后面跟的值;

为了简单代码里只用到了map_Kd,它表示漫反射所使用的纹理名称;

其他的是光照属性,代码里采用默认材质的光照属性;


<

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值