www.pudn.com > Render.rar > SJJ_Camera.cpp
#include ".\sjj_camera.h"
//把摄像机向量初始化为标准矩阵
SJJ_Camera::SJJ_Camera(void)
{
vCameraPos.x=0.0f;
vCameraPos.y=0.0f;
vCameraPos.z=0.0f;
vCameraLook.x=0.0f;
vCameraLook.y=0.0f;
vCameraLook.z=1.0f;
vCameraUp.x=0.0f;
vCameraUp.y=1.0f;
vCameraUp.z=0.0f;
vCameraRight.x=1.0f;
vCameraRight.y=0.0f;
vCameraRight.z=0.0f;
}
SJJ_Camera::~SJJ_Camera(void)
{
}
//-------------------------------------------------------------------------------
//功能描述: 在对摄像机进行操作后,最后调用此函数设置相机
//参数描述: pD3DDevice: D3D设备,在common结构中可直接传递m_pd3dDevice
//-------------------------------------------------------------------------------
void SJJ_Camera::SetCamera(LPDIRECT3DDEVICE9 pD3DDevice)
{
D3DXMATRIX view;
D3DXMatrixIdentity( &view );
view._11 = vCameraRight.x;
view._12 = vCameraUp.x;
view._13 = vCameraLook.x;
view._21 = vCameraRight.y;
view._22 = vCameraUp.y;
view._23 = vCameraLook.y;
view._31 = vCameraRight.z;
view._32 = vCameraUp.z;
view._33 = vCameraLook.z;
view._41 = - D3DXVec3Dot( &vCameraPos, &vCameraRight );
view._42 = - D3DXVec3Dot( &vCameraPos, &vCameraUp );
view._43 = - D3DXVec3Dot( &vCameraPos, &vCameraLook );
pD3DDevice->SetTransform(D3DTS_VIEW, &view);
}
//------------------------------------------------------------------------------
//功能描述: 把摄像机绕Y轴旋转一定角度,即左右转动视野
//参数描述: fYaw :旋转程度,不对应旋转角度,但是可以乘以灵敏度以调节转动速度
//------------------------------------------------------------------------------
void SJJ_Camera::RotateCamera_LeftRight(float fYaw)
{
//建立对应fYaw的旋转矩阵
D3DXMATRIX matYaw;
D3DXVECTOR3 StaticY(0.0f,1.0f,0.0f);//Y轴,绝对竖直
D3DXMatrixRotationAxis(&matYaw,&StaticY,fYaw);
//旋转vCameraLook,vCameraRight,vCameraUp
D3DXVec3TransformCoord(&vCameraLook,&vCameraLook,&matYaw);
D3DXVec3TransformCoord(&vCameraRight,&vCameraRight,&matYaw);
D3DXVec3TransformCoord(&vCameraUp,&vCameraUp,&matYaw);
}
//-------------------------------------------------------------------------------
//功能描述: 把摄像机绕右手vCameraRight上下转动,即视野抬头和低头
//参数描述: fPitch:旋转程度,不对应旋转角度,但是可以乘以灵敏度以调节转动速度
//-------------------------------------------------------------------------------
void SJJ_Camera::RotateCamera_UpDown(float fPitch)
{
//建立对应fPitch的旋转矩阵
D3DXMATRIX matPitch;
D3DXMatrixRotationAxis(&matPitch,&vCameraRight,fPitch);
//旋转vCameraLook,vCameraUp
D3DXVec3TransformCoord(&vCameraLook,&vCameraLook,&matPitch);
D3DXVec3TransformCoord(&vCameraUp,&vCameraUp,&matPitch);
}
//-------------------------------------------------------------------------------
//功能描述: 把摄像机左右移动位置,但视线方向不变
//参数描述: fLR :左右移动距离,右正左负,以vCameraRight位基准方向,可以乘灵敏度调节速度
//-------------------------------------------------------------------------------
void SJJ_Camera::MoveCamera_LeftRight(float fLR)
{
D3DXVec3Normalize(&vCameraRight,&vCameraRight);
vCameraPos+=(fLR*vCameraRight);
}
//-------------------------------------------------------------------------------
//功能描述: 把摄像机前后移动,但视线方向不变
//参数描述: fUD :前后移动举例,前正后负,以vCameraLook为基准方向,可以乘灵敏度以调节速度
//-------------------------------------------------------------------------------
void SJJ_Camera::MoveCamera_UpDown(float fUD)
{
D3DXVec3Normalize(&vCameraLook,&vCameraLook);
vCameraPos+=(fUD*vCameraLook);
}
void SJJ_Camera::MoveCamera_SX(float fSX)
{
D3DXVec3Normalize(&vCameraUp,&vCameraUp);
vCameraPos+=(fSX*vCameraUp);
}
//--------------------------------------------------------------------------------
//功能描述: 设定摄像机的方位坐标
//参数描述: x,y,z是方位3维坐标
//--------------------------------------------------------------------------------
void SJJ_Camera::SetCameraPos(float x,float y,float z)
{
vCameraPos.x=x;
vCameraPos.y=y;
vCameraPos.z=z;
}
//--------------------------------------------------------------------------------
//功能描述: 获取摄像机的方位坐标
//参数描述: x,y,z是方位3维坐标
//--------------------------------------------------------------------------------
void SJJ_Camera::GetCameraPos(float* x, float* y, float* z)
{
*x = vCameraPos.x;
*y = vCameraPos.y;
*z = vCameraPos.z;
}