staticmesh.cpp
来自「DirectInput的基本实现 只是基本应用」· C++ 代码 · 共 81 行
CPP
81 行
#include "StaticMesh.h"
CStaticMesh::CStaticMesh(LPDIRECT3DDEVICE9 pDevice)
{
m_pDevice=pDevice;
m_pMesh=NULL;
}
CStaticMesh::~CStaticMesh()
{
SAFE_RELEASE(m_pMesh);
SAFE_RELEASE(m_pDevice);
}
HRESULT CStaticMesh::InitMesh(char * str)
{
LPD3DXBUFFER pD3DXMtrlBuffer=NULL;
D3DXMATERIAL * d3dxMaterials=NULL; //缓冲区中材质的指针
D3DXLoadMeshFromX(str,0,
m_pDevice,
NULL,
&pD3DXMtrlBuffer, //材质缓冲区
NULL,
&m_dwNumOfMaterials, //材质数量
&m_pMesh);
d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer(); //获取材质地址
m_pMeshMaterials = new D3DMATERIAL9[m_dwNumOfMaterials]; //材质指针数组
m_pMeshTextures = new LPDIRECT3DTEXTURE9[m_dwNumOfMaterials]; //纹理指针数组
//D3DMATERIAL9
for(DWORD i=0; i<m_dwNumOfMaterials; i++ )
{
m_pMeshMaterials[i] = d3dxMaterials[i].MatD3D; //从缓冲区中拷贝材质
m_pMeshMaterials[i].Ambient = m_pMeshMaterials[i].Diffuse; //设置环境光属性
m_pMeshTextures[i] = NULL; //初始成空
D3DXCreateTextureFromFile( m_pDevice,"texture.dds", &m_pMeshTextures[i] );//根据材质中的纹理文件名加载纹理
}
SAFE_RELEASE(pD3DXMtrlBuffer);
m_pMesh->OptimizeInplace(D3DXMESHOPT_ATTRSORT|D3DXMESHOPT_COMPACT|D3DXMESHOPT_VERTEXCACHE,NULL,NULL,NULL,NULL);
return S_OK;
}
HRESULT CStaticMesh::SetMatrix(D3DXVECTOR3 Trans , float Rota ,float scal)
{
D3DXMATRIX matWorld,matScale,matTrans,matRota;
D3DXMatrixScaling(&matScale, scal,scal,scal);
D3DXMatrixTranslation(&matTrans,Trans.x,Trans.y,Trans.z);
D3DXMatrixRotationY( &matRota, Rota);
D3DXMatrixMultiply(&matWorld ,&matRota, &matTrans);
D3DXMatrixMultiply(&matWorld ,&matWorld, &matScale );
//坐标系转换,转换成世界坐标
m_pDevice->SetTransform(D3DTS_WORLD,&matWorld);
return S_OK;
}
HRESULT CStaticMesh::Render()
{
m_pDevice->SetFVF(m_pMesh->GetFVF());
for (DWORD i=0;i<m_dwNumOfMaterials;i++)
{
m_pDevice->SetMaterial(&m_pMeshMaterials[i]);
m_pDevice->SetTexture(0,m_pMeshTextures[i]);
m_pMesh->DrawSubset(i);
}
return S_OK;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?