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 + -
显示快捷键?