欢迎使用CSDN-markdown编辑器
2017-04-07 18:46
225 查看
//LPSTR=CHAR*
加载X文件步骤:
1,声明一个模型指针
2,通过X文件加载模型(模型指针,材质列表,材质数量)
3,解析材质列表,读取对应的材质和纹理,并存储到相应的容器中
4,根据每一个子集设置当前子集的渲染状态(材质,纹理,alpha混合,alpha测试),并逐个子集进行绘制,恢复渲染状态
加载X文件步骤:
1,声明一个模型指针
2,通过X文件加载模型(模型指针,材质列表,材质数量)
3,解析材质列表,读取对应的材质和纹理,并存储到相应的容器中
4,根据每一个子集设置当前子集的渲染状态(材质,纹理,alpha混合,alpha测试),并逐个子集进行绘制,恢复渲染状态
//加载X文件 LPD3DXBUFFER pBuffer=NULL; //拥有两个函数GetBufferPointer //GetBufferSize D3DXLoadMeshFromX( _file.c_str(), //X文件路径及文件名 D3DXMESH_MANAGED, //内存存储位置 m_pDevice, //设备指针 NULL, //临界信息 &pBuffer, //返回X文件中的材质信息 NULL, //shader指针,效果示例指针 &m_dwMtrls, //返回的材质数量 &m_pMesh //返回的模型指针 ); if(!m_pMesh) { outputDebugString(TEXT("Load X File ERROR!")); return; } D3DXMATRIAL *pMtrls=(D3DXMATRIAL*)pBuffer->GetBufferPointer();// //解析文件中的材质,获取其中的材质,纹理 for(int i=0;i<m_dwMtrls;++i) { D3DMATERIAL9 *pMtrl=new D3DMATERIAL9; *pMtrl=pMtrls[i].MatD3D; //手动赋值,让当前模型对环境光的反射和漫反射一致 *pMtrl.Ambient=*pMtrl.Diffuse; m_vMtrls.push_back(*pMtrl); //读取纹理,加载后放入容器 LPDIRECT3DTEXTURE9 pTexture=NULL; WCHAR strDest[100]=TEXT("res\\mesh\\"); WCHAR str[100]={}; MultibyteToWideChar( CP_ACP,//固定参数 0, pMatrls[i].pTextureFilename, -1, str, PATH_MAX); D3DXCreateTextureFromFile( m_pDevice, str, &pTexture); wcscat(strDest,str); //由于在X文件中不是所有的材质都会对应一张纹理 m_vPTextures.push_back(pTexture); } //绘制 m_pDevice->SetTransform(D3DTS_WORLD,&m_matWorld); //当前模型应该具有的渲染状态 for(int i=0;i<m_dwMatrls;++i) { //当前子集应该具有的渲染状态 m_pDevice->SetMaterial(&m_vMtrls.at(i)); m_pDevice->SetTexture(0,m_vTextures.at(i)); m_pMesh->DrawSubset(i); }; m_pDevice->SetMaterial(&m_nullMtrl); m_pDevice->SetTexture(0,0); m_pDevice->SetTransform(D3DTS_WORLD,&m_matIdentity); //释放
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器ss
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器