Direct3D 对X模型载入

Direct3D 对X模型载入


今天我们来学习Direct3D对模型的导入使用,Direct3D支持.X模型文件导入使用,.X文件是微软定义的3D模型文件格式,其中包含网格,动画,纹理等等一些信息. 目前3DS Max 和 Maya本身已经不支持对X模型的导出了, 只能使用3DS Max上有一个插件叫”3DS Max panda”可以把模型转换成X文件。

模型: http://yunpan.cn/cLXcxGKjwmqgk  访问密码 ec5c
X模型查看器:  http://yunpan.cn/cLXcnArcQ7h5y  访问密码 8605

 

Direct3D使用模型需要以下步骤

  • 对X文件加载网络模型
  • 载入材质和纹理
  • 绘制网格

 

1. 对X文件加载网络模型

D3DXLoadMeshFromX(
L"miki.X", //模型的名称
D3DXMESH_MANAGED, //创建网格的时候附加选项, D3DMESH枚举值 一个或多个值
g_pd3dDevice, //D3D设备
&pAdjBuffer, //每一个多边形周围的多边形信息的缓冲区内存地址
&pMtrlBuffer, //保存所有网格的子集材质,用于保存模型的材质和纹理文件的缓冲区地址
NULL, //存储网格模型的特殊效果,直接NULL
&g_dwNumMtrls, //所有材质的个数
&g_pMesh); //模型网格

2. 载入材质和纹理

D3DXMATERIAL *pMtrls = (D3DXMATERIAL*)pMtrlBuffer->GetBufferPointer();    //创建一个D3DXMATERIAL结构体用于读取材质和纹理信息
g_pMaterials = new D3DMATERIAL9[g_dwNumMtrls]; //创建材质数组
g_pTextures = new LPDIRECT3DTEXTURE9[g_dwNumMtrls]; //创建贴图数组 for (DWORD i=0; i<g_dwNumMtrls; i++)
{ g_pMaterials[i] = pMtrls[i].MatD3D; //获取材质,
g_pMaterials[i].Ambient = g_pMaterials[i].Diffuse; //并设置一下环境光的颜色值 //创建一下纹理对象 ,从材质里面创建贴图
g_pTextures[i] = NULL;
D3DXCreateTextureFromFileA(g_pd3dDevice, pMtrls[i].pTextureFilename, &g_pTextures[i]);
}

3. 绘制网格

// 进行网格各个部分的绘制
for (DWORD i = 0; i < g_dwNumMtrls; i++)
{
g_pd3dDevice->SetMaterial(&g_pMaterials[i]); //设置材质
g_pd3dDevice->SetTexture(0, g_pTextures[i]); //设置图片
g_pMesh->DrawSubset(i); //绘制模型网格
}
上一篇:[cocos2d-x 3.0] 触摸显示器


下一篇:EasyDarwin如何支持点播和RTMP/HLS直播?EasyDSS!