⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 table.cpp

📁 C++台球游戏代码
💻 CPP
字号:
#include "Table.h"

CTable::CTable(LPDIRECT3DDEVICE8 pD3DDevice,LPSTR pFilename)
{
	LPD3DXBUFFER pMaterialsBuffer=NULL;
	LPD3DXMESH pMeshTable=NULL;

	m_pD3DDevice=pD3DDevice;

	if(FAILED(D3DXLoadMeshFromX(pFilename,D3DXMESH_MANAGED,m_pD3DDevice,NULL,
		                        &pMaterialsBuffer,&m_dwNumMaterials,&pMeshTable)))
	{
		m_pMeshTable=NULL;
		m_pMeshTableMaterials=NULL;
		m_pMeshTableTextures=NULL;

		LogError("<li>Table Mesh '%s' failed to load",pFilename);
		return;
	}

	D3DXMATERIAL *matMaterials=(D3DXMATERIAL*)pMaterialsBuffer->GetBufferPointer();
	
	//Create two arrays. One to hold the materials and one to hold the textures
    m_pMeshTableMaterials=new D3DMATERIAL8[m_dwNumMaterials];
	m_pMeshTableTextures=new LPDIRECT3DTEXTURE8[m_dwNumMaterials];

	for(DWORD i=0;i<m_dwNumMaterials;i++)
	{
		//Copy the material
		m_pMeshTableMaterials[i]=matMaterials[i].MatD3D;

		//Set the ambient color for the material(D3DX does not do this)
		m_pMeshTableMaterials[i].Ambient=m_pMeshTableMaterials[i].Diffuse;

		D3DCOLORVALUE rgbaSpecular={0.0f,0.0f,0.0f,0.0f};
		m_pMeshTableMaterials[i].Specular=rgbaSpecular;
		m_pMeshTableMaterials[i].Power=50.0f;

		//Create the texture
		char buffer[255];
		sprintf(buffer,"textures/%s",matMaterials[i].pTextureFilename);
		if(FAILED(D3DXCreateTextureFromFile(m_pD3DDevice,
			                                buffer,
											&m_pMeshTableTextures[i])))
		{
			m_pMeshTableTextures[i]=NULL;
		}
	}

	//finished with the material buffer,so release it
	SafeRelease(pMaterialsBuffer);

	//Make sure that the normals are setup for mesh
	pMeshTable->CloneMeshFVF(D3DXMESH_MANAGED,MESH_D3DFVF_CUSTOMVERTEX,m_pD3DDevice,&m_pMeshTable);
	SafeRelease(pMeshTable);

//  D3DXComputeNormals(m_pMesh);

	LogInfo("<li>Mesh '%s' loaded OK",pFilename);
}

CTable::~CTable()
{
	SafeDelete(m_pMeshTableMaterials);

	if(m_pMeshTableTextures != NULL)
	{
		for(DWORD i=0;i<m_dwNumMaterials;i++)
		{
			if(m_pMeshTableTextures[i])
				SafeRelease(m_pMeshTableTextures[i]);
		}
	}

	SafeDelete(m_pMeshTableTextures);
	SafeRelease(m_pMeshTable);

	LogInfo("<li>Table Mesh destroyed OK");
}

DWORD CTable::Render()
{
	TransformTable();
	if(m_pMeshTable!=NULL)
	{
		for(DWORD i=0;i<m_dwNumMaterials;i++)
		{
			m_pD3DDevice->SetMaterial(&m_pMeshTableMaterials[i]);
			m_pD3DDevice->SetTexture(0,m_pMeshTableTextures[i]);

			m_pMeshTable->DrawSubset(i);
		}

		return m_pMeshTable->GetNumFaces();
	}
	else 
		return 0;
}

LPD3DXMESH CTable::GetMeshTablePointer()
{
	return m_pMeshTable;
}

void CTable::TransformTable()
{	
	D3DXMATRIX matWorld;
	D3DXMatrixTranslation(&matWorld,0,0,0);
	m_pD3DDevice->SetTransform(D3DTS_WORLD,&matWorld);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -