Camera.h
资源名称:虚拟地形建模.rar [点击查看]
上传用户:dfjhuyju
上传日期:2013-03-13
资源大小:11035k
文件大小:2k
源码类别:
OpenGL
开发平台:
Visual C++
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #define SCREEN_WIDTH 400
- #define SCREEN_HEIGHT 300
- class CVector3
- {
- public:
- // 缺省构造函数
- CVector3() {}
- // 用户构造函数
- CVector3(float X, float Y, float Z)
- {
- x = X; y = Y; z = Z;
- }
- // 定义矢量之间的'+'法
- CVector3 operator+(CVector3 vVector)
- {
- // 返回结果
- return CVector3(vVector.x + x, vVector.y + y, vVector.z + z);
- }
- // 定义矢量之间的'-'法
- CVector3 operator-(CVector3 vVector)
- {
- // 返回矢量相减的结果
- return CVector3(x - vVector.x, y - vVector.y, z - vVector.z);
- }
- // 定义矢量与数的'*'法
- CVector3 operator*(float num)
- {
- // 返回结果
- return CVector3(x * num, y * num, z * num);
- }
- // 定义矢量与数的'/'法
- CVector3 operator/(float num)
- {
- // 返回结果
- return CVector3(x / num, y / num, z / num);
- }
- float x, y, z;
- };
- // 摄像机类
- class CCamera {
- public:
- // 摄像机类的构造函数
- CCamera();
- // 下面的函数是获取有关摄像机的数据
- CVector3 Position() { return m_vPosition; }
- CVector3 View() { return m_vView; }
- CVector3 UpVector() { return m_vUpVector; }
- CVector3 Strafe() { return m_vStrafe; }
- // 摄像机位置
- void PositionCamera(float positionX, float positionY, float positionZ,
- float viewX, float viewY, float viewZ,
- float upVectorX, float upVectorY, float upVectorZ);
- // 旋转摄像机
- void RotateView(float angle, float X, float Y, float Z);
- // 移动视点
- void SetViewByMouse();
- // 绕一点旋转摄像机
- void RotateAroundPoint(CVector3 vCenter, float X, float Y, float Z);
- // 左右移动摄像机
- void StrafeCamera(float speed);
- // 移动摄像机
- void MoveCamera(float speed);
- // 键盘事件
- void CheckForMovement();
- void Update();
- void Look();
- private:
- // 摄像机的位置
- CVector3 m_vPosition;
- // 摄像机的视野
- CVector3 m_vView;
- // 摄像机的向上的位置
- CVector3 m_vUpVector;
- // 摄像机左右方向
- CVector3 m_vStrafe;
- };