Camera.h
上传用户:dfjhuyju
上传日期:2013-03-13
资源大小:11035k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #define SCREEN_WIDTH 400
  6. #define SCREEN_HEIGHT 300
  7. class CVector3
  8. {
  9. public:
  10. // 缺省构造函数
  11. CVector3() {}
  12. // 用户构造函数
  13. CVector3(float X, float Y, float Z) 
  14. x = X; y = Y; z = Z;
  15. }
  16. // 定义矢量之间的'+'法 
  17. CVector3 operator+(CVector3 vVector)
  18. {
  19. // 返回结果
  20. return CVector3(vVector.x + x, vVector.y + y, vVector.z + z);
  21. }
  22. // 定义矢量之间的'-'法 
  23. CVector3 operator-(CVector3 vVector)
  24. {
  25. // 返回矢量相减的结果
  26. return CVector3(x - vVector.x, y - vVector.y, z - vVector.z);
  27. }
  28. // 定义矢量与数的'*'法
  29. CVector3 operator*(float num)
  30. {
  31. // 返回结果
  32. return CVector3(x * num, y * num, z * num);
  33. }
  34. // 定义矢量与数的'/'法
  35. CVector3 operator/(float num)
  36. {
  37. // 返回结果
  38. return CVector3(x / num, y / num, z / num);
  39. }
  40. float x, y, z;
  41. };
  42. // 摄像机类
  43. class CCamera {
  44. public:
  45. // 摄像机类的构造函数
  46. CCamera();
  47. // 下面的函数是获取有关摄像机的数据
  48. CVector3 Position() { return m_vPosition; }
  49. CVector3 View() { return m_vView; }
  50. CVector3 UpVector() { return m_vUpVector; }
  51. CVector3 Strafe() { return m_vStrafe; }
  52. //  摄像机位置
  53. void PositionCamera(float positionX, float positionY, float positionZ,
  54.       float viewX,     float viewY,     float viewZ,
  55. float upVectorX, float upVectorY, float upVectorZ);
  56. // 旋转摄像机
  57. void RotateView(float angle, float X, float Y, float Z);
  58. // 移动视点
  59. void SetViewByMouse(); 
  60. // 绕一点旋转摄像机
  61. void RotateAroundPoint(CVector3 vCenter, float X, float Y, float Z);
  62. //  左右移动摄像机
  63. void StrafeCamera(float speed);
  64. //  移动摄像机
  65. void MoveCamera(float speed);
  66. // 键盘事件
  67. void CheckForMovement();
  68. void Update();
  69. void Look();
  70. private:
  71. // 摄像机的位置
  72. CVector3 m_vPosition;
  73. // 摄像机的视野
  74. CVector3 m_vView;
  75. // 摄像机的向上的位置
  76. CVector3 m_vUpVector;
  77. //  摄像机左右方向
  78. CVector3 m_vStrafe;
  79. };