ch21p1_gun.cpp

来自「游戏开发特殊技巧-special.effects.game.programmin」· C++ 代码 · 共 59 行

CPP
59
字号
#include "Ch21p1_Gun.h"

CGun::CGun()
{
	m_pMesh = NULL;
	m_pd3dDevice = NULL;
}

CGun::~CGun()
{
	InvalidateDeviceObjects();
}

HRESULT CGun::RestoreDeviceObjects(LPDIRECT3DDEVICE8 pDev, const char *strMeshFilename)
{
	m_pd3dDevice = pDev;
	m_pMesh = new CD3DMesh;

	TCHAR buf[256];
	DXUtil_ConvertGenericStringToAnsi(buf, strMeshFilename, sizeof(buf));

	if( FAILED( m_pMesh->Create(m_pd3dDevice, buf) ) )
    return E_FAIL;

	m_pMesh->RestoreDeviceObjects(m_pd3dDevice);

	return S_OK;
}

void CGun::InvalidateDeviceObjects()
{
	if (m_pMesh) {
		m_pMesh->Destroy();
		SAFE_DELETE(m_pMesh);
	}
}

void CGun::AssembleWorldMatrix(CCamera &camera, D3DXMATRIX &matWorld,
															 D3DXVECTOR3 vTranslation)
{
	D3DXMATRIX matTrans, matScale, matRot;
	D3DXMATRIX matView = camera.GetViewMatrix();
	D3DXMATRIX matViewInverse;
	float fDet;

	D3DXMatrixInverse(&matViewInverse, &fDet, &matView);
	D3DXMatrixTranslation(&matTrans, 
		m_vPos.x+vTranslation.x, 
		m_vPos.y+vTranslation.y, 
		m_vPos.z+vTranslation.z);

	D3DXMatrixScaling(&matScale, 0.15f, 0.15f, 0.15f);
	D3DXMatrixRotationYawPitchRoll(&matRot, 
		(float)PI-((float)PI/15.0f), 
		(float)PI/16.0f, 0.0f);
	
	matWorld = matRot * matScale * matTrans * matViewInverse; 
}

⌨️ 快捷键说明

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