DX的摄影机的类CCamera

CCamera—很简洁的一个类(VC2003),

实现的功能有 前进后退,左右平移,上下平移,左右旋转,上下旋转

/ Camera.h

#pragma once
#include <d3dx9.h>
#include <d3d9.h>
class CCamera
{
public:
CCamera(LPDIRECT3DDEVICE9 device);
~CCamera(void);
private:
D3DXVECTOR3 m_at;
D3DXVECTOR3 m_up;
D3DXVECTOR3 m_eye;
LPDIRECT3DDEVICE9 m_device;
public:
void SetCamera(void);
void ForwardBack(float offset);
void RightLeft(float offset);

void UDRomate(float angle);
void RLRomate(float angle);
void SetEye(float x, float y, float z);
void SetAt(float x, float y, float z);
void SetUp(float x, float y, float z);
void UpDown(float offset);
};


//.cpp

#include ".\camera.h"

CCamera::CCamera(LPDIRECT3DDEVICE9 device)
{
m_device=device;
memset(&m_eye,0,sizeof(D3DXVECTOR3));//默认的位置
memset(&m_at,0,sizeof(D3DXVECTOR3));
m_at.y=50;
memset(&m_up,0,sizeof(D3DXVECTOR3));
m_up.z=1;


}

CCamera::~CCamera(void)
{
}

void CCamera::SetCamera(void)//放到主循环中的
{
D3DXMATRIX viewM;
D3DXMatrixLookAtLH(&viewM,&m_eye,&m_at,&m_up);
m_device->SetTransform(D3DTS_VIEW,&viewM);
D3DXMATRIX projectM;
D3DXMatrixPerspectiveFovLH(&projectM,D3DX_PI/2,800.0f/600.0f,1.0f,1000.0f);
m_device->SetTransform(D3DTS_PROJECTION,&projectM);
}

void CCamera::ForwardBack(float offset)//前进后退
{
D3DXVECTOR3 font= m_at-m_eye;
D3DXVec3Normalize(&font,&font);
m_eye+=font*offset;
m_at+=font*offset;
}

void CCamera::RightLeft(float offset)//左右平移(如CS里的横走)
{
D3DXVECTOR3 right;
D3DXVECTOR3 font=m_at-m_eye;
D3DXVec3Cross(&right,&m_up,&font);
D3DXVec3Normalize(&right,&right);

m_eye+=right*offset;
m_at+=right*offset;
}


void CCamera::UDRomate(float angle)//上下旋转
{
D3DXMATRIX romate;
D3DXVECTOR3 font=m_at-m_eye;
D3DXVECTOR3 right;

D3DXVec3Cross(&right,&m_up,&font);
D3DXMatrixRotationAxis(&romate,&right,angle);
D3DXVec3TransformNormal(&font,&font,&romate);
D3DXVec3TransformNormal(&m_up,&m_up,&romate);

m_at=m_eye+font;

}

void CCamera::RLRomate(float angle)//左右旋转
{
D3DXMATRIX romate;
D3DXVECTOR3 font=m_at-m_eye;
D3DXMatrixRotationAxis(&romate,&m_up,angle);
D3DXVec3TransformNormal(&font,&font,&romate);
m_at=m_eye+font;
}

void CCamera::SetEye(float x, float y, float z)//也可以自己设定位置
{
m_eye.x=x;
m_eye.y=y;
m_eye.z=z;
}

void CCamera::SetAt(float x, float y, float z)
{
m_at.x=x;
m_at.y=y;
m_at.z=z;
}

void CCamera::SetUp(float x, float y, float z)
{
m_up.x=x;
m_up.y=y;
m_up.z=z;
}

void CCamera::UpDown(float offset)//上下平移
{


D3DXVECTOR3 up;
D3DXVec3Normalize(&up,&m_up);

m_eye+=up*offset;
m_at+=up*offset;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值