www.pudn.com > 3DRPG.rar > Mesh.cpp


#include "stdafx.h" 
#include "Mesh.h" 
 
 
CMesh::CMesh(LPDIRECT3DDEVICE9 d3dd,LPSTR str) 
{   m_pD3DDevice=d3dd; 
	LPD3DXBUFFER pBuffer; 
	D3DXMATERIAL *  pMat; 
    LPD3DXMESH pMesh = NULL; 
	 
	D3DXLoadMeshFromX(str,D3DXMESH_SYSTEMMEM,m_pD3DDevice,NULL,&pBuffer,NULL,&m_dwNumOfMaterials,&m_pMesh); 
	pMat=(D3DXMATERIAL*) pBuffer->GetBufferPointer(); 
	m_pMaterial=new D3DMATERIAL9 [m_dwNumOfMaterials]; 
	m_pTexture=new LPDIRECT3DTEXTURE9 [m_dwNumOfMaterials]; 
	 
	for(DWORD i=0;iRelease(); 
	//pMesh->CloneMeshFVF(D3DXMESH_MANAGED, MESH_D3DFVF_CUSTOMVERTEX, m_pD3DDevice, &m_pMesh); 
	//SafeRelease(pMesh); 
	/*DWORD * adjacencyInfo=new DWORD[m_pMesh->GetNumFaces()*3]; 
	m_pMesh->GenerateAdjacency(0.0f,adjacencyInfo); 
	DWORD* optimizedAdjacencyInfo=new DWORD[m_pMesh->GetNumFaces()*3]; 
	m_pMesh->OptimizeInplace(D3DXMESHOPT_ATTRSORT|D3DXMESHOPT_DONOTSPLIT,adjacencyInfo,optimizedAdjacencyInfo,0,0);*/ 
	D3DXComputeNormals(m_pMesh,NULL); 
} 
 
CMesh::~CMesh() 
{ 
    if(m_pMaterial!=NULL) 
	{ 
		delete [] m_pMaterial; 
	} 
	if(m_pTexture!=NULL) 
	{ 
		for(DWORD i=0;iRelease(); 
			} 
		} 
		delete [] m_pTexture; 
	} 
	m_pMesh->Release(); 
	 
} 
 
void CMesh::RenderMesh() 
{// m_pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE ); 
    //m_pD3DDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA ); 
   // m_pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); 
 
     // m_pD3DDevice->SetRenderState( D3DRS_CLIPPLANEENABLE ,TRUE); 
	for(DWORD i=0;iSetMaterial(&m_pMaterial[i]); 
		m_pD3DDevice->SetTexture(0,m_pTexture[i]); 
        
		m_pMesh->DrawSubset(i); 
        
	} 
     // m_pD3DDevice->SetRenderState( D3DRS_CLIPPLANEENABLE ,FALSE); 
} 
 
void CMesh::Translate(POSITION ppos) 
{ 
     
	D3DXMATRIX matRotation,matTranslate; 
	D3DXMatrixRotationY(&matRotation,-D3DX_PI/180*(ppos.a+90.0f)); 
	D3DXMatrixTranslation(&matTranslate,ppos.x,ppos.y+65.0f,ppos.z); 
	D3DXMatrixMultiply(&matWorld,&matRotation,&matTranslate); 
	m_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld); 
 
} 
void CMesh::Translation(NPOSITION ppos) 
{ 
    D3DXMATRIX matRotation,matTranslate; 
	D3DXMatrixRotationY(&matRotation,-D3DX_PI/180*(ppos.a+90.0f)); 
	D3DXMatrixTranslation(&matTranslate,ppos.x,ppos.y+65.0f,ppos.z); 
	D3DXMatrixMultiply(&matWorld,&matRotation,&matTranslate); 
	m_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld); 
}