摄像机

Directx c++实现一个灵活的第三人称camera(角色跟随)

class CameraClass
{
private:
    //成员变量的声明
    D3DXVECTOR3                m_vRightVector;        // 右分量向量
    D3DXVECTOR3                m_vUpVector;           // 上分量向量
    D3DXVECTOR3                m_vLookVector;         // 观察方向向量
    D3DXVECTOR3                m_vCameraPosition;        // 摄像机位置的向量
    D3DXVECTOR3                m_vTargetPosition;        //目标观察位置的向量
    D3DXMATRIX                m_matView;          // 取景变换矩阵
    D3DXMATRIX                m_matProj;          // 投影变换矩阵   
    LPDIRECT3DDEVICE9        m_pd3dDevice;  //Direct3D设备对象


    D3DXVECTOR3        m_vNewXAxis;
    D3DXVECTOR3        m_vNewZAxis;


public:
    //一个计算取景变换的函数
    VOID CalculateViewMatrix(D3DXMATRIX *pMatrix);    //计算取景变换矩阵


    //三个Get系列函数
    VOID GetProjMatrix(D3DXMATRIX *pMatrix)  { *pMatrix = m_matProj; }  //返回当前投影矩阵
    VOID GetCameraPosition(D3DXVECTOR3 *pVector)  { *pVector = m_vCameraPosition; } //返回当前摄像机位置矩阵
    VOID GetLookVector(D3DXVECTOR3 *pVector) { *pVector = m_vLookVector; }  //返回当前的观察矩阵


    //四个Set系列函数,注意他们参数都有默认值NULL的,调用时不写参数也可以
    VOID SetTargetPosition(D3DXVECTOR3 *pLookat = NULL);  //设置摄像机的目标观察位置向量
    VOID SetCameraPosition(D3DXVECTOR3 *pVector = NULL); //设置摄像机所在的位置向量
    VOID SetViewMatrix(D3DXMATRIX *pMatrix = NULL);  //设置取景变换矩阵
    VOID SetProjMatrix(D3DXMATRIX *pMatrix = NULL);  //设置投影变换矩阵
    void ThirdPersonRotationX(float angle);//第三人称摄像头绕右分量向量旋转
    void ThirdPersonRotationY(float angle);//第三人称摄像头绕上分量向量旋转


public:
    // 沿各分量平移的三个函数
    VOID MoveAlongRightVec(FLOAT fUnits);   // 沿right向量移动
    VOID MoveAlongUpVec(FLOAT fUnits);      // 沿up向量移动
    VOID MoveAlongLookVec(FLOAT fUnits);    // 沿look向量移动


    // 绕各分量旋转的三个函数
    VOID RotationRightVec(FLOAT fAngle);    // 绕right向量旋转
    VOID RotationUpVec(FLOAT fAngle);       // 绕up向量旋转
    VOID RotationLookVec(FLOAT fAngle);     // 绕look向量旋转


    //返回一个


public:
    //构造函数和析构函数
    CameraClass(IDirect3DDevice9 *pd3dDevice);  //构造函数
    virtual ~CameraClass(void); 

http://www.cnblogs.com/shit/archive/2013/05/13/3075825.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值