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;
}
分享到:
相关推荐
本文将详细讲解`CCamera`类在Direct3D场景中的应用及其实现。 `CCamera`类通常包含以下几个关键组件和功能: 1. **位置(Position)**:摄像机的位置是其在3D空间中的坐标,决定了观察者在场景中的所在点。通过平...
该类使用很方便,加到工程中就可以使用了.从我上载的程序virtual_house2.0里你就可以看到.可以做到前进,后退,左移,右移,向左转,向右转,上仰,下俯.类似于cs里的场景.而且这个摄象机还带有边界检测功能,摄象机是不能跑...
里面还有一个第一人称视角的摄象机类cCamera.该类使用很方便,从这个程序里你就可以看到.可以做到前进,后退,左移,右移,向左转,向右转,上仰,下俯. 这个室内漫游程序的贴图效果不是很好,主要是因为图片没有很好的设计,...
CCamera类代表了摄像头设备,而MCaptureSession类则负责管理和控制实际的拍摄过程。 "Carbide"在标签中提及,指的是Carbide.c++,这是一个强大的Symbian开发集成环境,由诺基亚开发,为Symbian应用提供了直观的界面...
3. **CCamera.cpp 和 CCamera.h**:这些文件定义了`CCamera`类,用于处理游戏视角和视锥体设置。相机类通常包括方法来移动、旋转相机,以及计算相机视图矩阵,这对于渲染至关重要。 4. **CBspLevel.cpp 和 ...
1. 预留资源:首先,我们需要通过调用`CCamera::Reserve`方法预留摄像头资源。这个过程是异步的,因此我们需要实现`MCameraObserver`中的`ReserveComplete`回调函数,以接收操作结果。 2. 打开电源:成功预留资源后...
- 在Class Wizard中选择`Add Class`,设置类名为`CCamera`,文件名为`camera.cpp`,基类为`CDialog`,对话框ID为`IDD_BUTTON_CAMERA`。此时工程文件中会增加`camera.cpp`和`camera.h`两个文件。 2. **编辑视图类...
- 类和对象:通过类(如CCamera)封装摄像头的操作。 - 文件操作:用于保存拍摄的照片和录制的视频到文件系统。 - 多线程:可能使用多线程技术来同时进行拍照和录像,或者进行后台处理。 - GUI编程:使用对话框类...
`CCamera.hpp` 可能定义了一个相机类,该类负责处理视图变换,允许开发者在游戏世界中自由移动和调整视角。这包括平移、旋转和缩放操作,以创建不同的视觉效果。 `CSound.hpp` 文件则可能包含了音频管理的类,它...