今天我们来学习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); //绘制模型网格 }
时间: 2024-12-29 23:21:42