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);
}