www.pudn.com > Render.rar > SJJ_Role.cpp


#include ".\sjj_role.h" 
 
//----------------------------------------------------------------------------- 
//功能描述:构造函数,接收Direct3D设备,创建CD3DMesh对象,初始化世界矩阵 
//参数描述:ppDevice是设备指针指针 
//----------------------------------------------------------------------------- 
SJJ_Role::SJJ_Role(LPDIRECT3DDEVICE9* ppDevice) 
{ 
	pDevice=*ppDevice; 
	pMesh=new CD3DMesh; 
	D3DXMatrixIdentity(&matWorld); 
} 
 
SJJ_Role::~SJJ_Role(void) 
{ 
	delete pMesh; 
} 
 
//----------------------------------------------------------------------------- 
//功能描述:将mesh模型向其自身的左右方向平移 
//参数描述:fLR平移距离,右正左负 
//----------------------------------------------------------------------------- 
void SJJ_Role::MoveRoleLeftRight(float fLR) 
{ 
	//从Role世界矩阵中取出向量 
	D3DXVECTOR3 Role_vRight(matWorld._11,matWorld._12,matWorld._13); 
	D3DXVECTOR3 Role_vUp   (matWorld._21,matWorld._22,matWorld._23); 
	D3DXVECTOR3 Role_vLook (matWorld._31,matWorld._32,matWorld._33); 
	D3DXVECTOR3 Role_vPos  (matWorld._41,matWorld._42,matWorld._43); 
 
	//单位化并移动 
	D3DXVec3Normalize(&Role_vRight,&Role_vRight); 
    Role_vPos+=(fLR*Role_vRight); 
 
	//写回 
	matWorld._11=Role_vRight.x; 
	matWorld._12=Role_vRight.y; 
	matWorld._13=Role_vRight.z; 
 
	matWorld._21=Role_vUp.x; 
	matWorld._22=Role_vUp.y; 
	matWorld._23=Role_vUp.z; 
 
	matWorld._31=Role_vLook.x; 
	matWorld._32=Role_vLook.y; 
	matWorld._33=Role_vLook.z; 
 
	matWorld._41=Role_vPos.x; 
	matWorld._42=Role_vPos.y; 
	matWorld._43=Role_vPos.z; 
} 
 
//----------------------------------------------------------------------------- 
//功能描述:将mesh模型向其自身的前后方向平移 
//参数描述:fUD平移距离,前正后负 
//----------------------------------------------------------------------------- 
void SJJ_Role::MoveRoleUpDown(float fUD) 
{ 
	//从Role世界矩阵中取出向量 
	D3DXVECTOR3 Role_vRight(matWorld._11,matWorld._12,matWorld._13); 
	D3DXVECTOR3 Role_vUp   (matWorld._21,matWorld._22,matWorld._23); 
	D3DXVECTOR3 Role_vLook (matWorld._31,matWorld._32,matWorld._33); 
	D3DXVECTOR3 Role_vPos  (matWorld._41,matWorld._42,matWorld._43); 
 
	//单位化并移动 
	D3DXVec3Normalize(&Role_vLook,&Role_vLook); 
	Role_vPos+=(fUD*Role_vLook); 
 
	//写回 
	matWorld._11=Role_vRight.x; 
	matWorld._12=Role_vRight.y; 
	matWorld._13=Role_vRight.z; 
 
	matWorld._21=Role_vUp.x; 
	matWorld._22=Role_vUp.y; 
	matWorld._23=Role_vUp.z; 
 
	matWorld._31=Role_vLook.x; 
	matWorld._32=Role_vLook.y; 
	matWorld._33=Role_vLook.z; 
 
	matWorld._41=Role_vPos.x; 
	matWorld._42=Role_vPos.y; 
	matWorld._43=Role_vPos.z; 
} 
 
//---------------------------------------------------------------------------- 
//功能描述:将mesh模型绕自身Y轴旋转一定度数 
//参数描述:fRads 旋转度数,弧度 
//---------------------------------------------------------------------------- 
void SJJ_Role::RotateRoleY(float fRads) 
{ 
	D3DXMATRIX matTran; 
	D3DXMatrixRotationY(&matTran,fRads); 
    D3DXMatrixMultiply(&matWorld,&matTran,&matWorld); 
} 
 
//-------------------------------------------------------------------------- 
//功能描述:缩放mesh模型 
//参数描述:scal :1为原大小,0.5为一半,以此类推,相对当前大小缩放 
//-------------------------------------------------------------------------- 
void SJJ_Role::ScalMesh(float fScal) 
{ 
	D3DXMATRIX matScal; 
	D3DXMatrixScaling(&matScal,fScal,fScal,fScal); 
//	D3DXMatrixScaling(&matScal,fScal*.001f,fScal*.001f,fScal*.001f); 
	D3DXMatrixMultiply(&matWorld,&matScal,&matWorld); 
 
} 
 
//---------------------------------------------------------------------------- 
//功能描述:获取mesh模型的位置坐标 
//参数描述:将坐标写入x,y,z 
//---------------------------------------------------------------------------- 
void SJJ_Role::GetPos(float* x, float* y, float* z) 
{ 
	*x=matWorld._41; 
	*y=matWorld._42; 
	*z=matWorld._43; 
} 
 
//---------------------------------------------------------------------------- 
//功能描述:直接设置mesh模型的位置坐标 
//参数描述:坐标(x,y,z) 
//---------------------------------------------------------------------------- 
void SJJ_Role::SetPos(float x, float y, float z) 
{ 
	matWorld._41=x; 
	matWorld._42=y; 
	matWorld._43=z; 
 
	//当然这里可以用D3DXMatrixTranslation构建平移矩阵,然后乘在matWorld上 
	//但是我们的方法更体现了对底层数据的控制,实际上这就是它的代码 
} 
 
//---------------------------------------------------------------------------- 
//功能描述:释放Mesh模型所占用的资源 
//参数描述:无 
//---------------------------------------------------------------------------- 
void SJJ_Role::CleanUp(void) 
{ 
	pMesh->InvalidateDeviceObjects(); 
	pMesh->Destroy(); 
} 
 
//---------------------------------------------------------------------------- 
//功能描述:通过文件名创建Mesh模型并加载 
//参数描述:pFileName是文件名字符串 
//---------------------------------------------------------------------------- 
void SJJ_Role::InitMesh(char* pFileName) 
{ 
	pMesh->Create(pDevice,pFileName); 
	pMesh->RestoreDeviceObjects(pDevice); 
} 
 
//---------------------------------------------------------------------------- 
//功能描述:渲染所加载的Mesh模型 
//参数描述:无 
//---------------------------------------------------------------------------- 
void SJJ_Role::Render(void) 
{ 
	pDevice->SetTransform(D3DTS_WORLD, &matWorld); 
	pMesh->Render(pDevice); 
}