Camera.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Camera.cpp: implementation of the CCamera class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Camera.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CCamera::CCamera()
  10. {
  11.     m_CamPos=VERTEX(10,0,10);
  12.     m_CamDirection=NORMAL(1,0,0);
  13. m_CamRotY=0;
  14. }
  15. CCamera::~CCamera()
  16. {
  17. }
  18. void CCamera::SetCamera(VERTEX position,float rotY)
  19. {
  20.     m_CamPos=position;
  21. m_CamRotY=rotY;
  22. m_CamDirection=NORMAL(-sinf(rotY*0.0174533f),
  23.                   0,
  24.   -cosf(rotY*0.0174533f));
  25. m_CamDirection=math.Normalization(m_CamDirection);
  26. }
  27. void CCamera::SetCamera(VERTEX newFoucs)
  28. {
  29. m_CamDirection=NORMAL(newFoucs.xpos-m_CamPos.xpos,0,newFoucs.zpos-m_CamPos.zpos);
  30. m_CamDirection=math.Normalization(m_CamDirection);
  31. m_CamRotY=acosf(-m_CamDirection.nz/float(sqrt(m_CamDirection.nz*m_CamDirection.nz+m_CamDirection.nx*m_CamDirection.nx)))*57.29578f;
  32. if(m_CamDirection.nx>0)m_CamRotY=360-m_CamRotY;
  33. }
  34. void   CCamera::SetCameraRotate(float yrot)
  35. {
  36. if(yrot>360 || yrot<0)yrot=0;
  37. m_CamRotY=yrot;
  38. }
  39. void   CCamera::SetCameraPosition(VERTEX pos)
  40. {
  41.     m_CamPos=pos;
  42. }
  43. float CCamera::GetDistance(VERTEX pos)
  44. {
  45. float dx=(m_CamPos.xpos>pos.xpos)?(m_CamPos.xpos-pos.xpos):(pos.xpos-m_CamPos.xpos);
  46. // float dy=(m_CamPos.ypos>pos.ypos)?(m_CamPos.ypos-pos.ypos):(pos.ypos-m_CamPos.ypos);
  47. float dz=(m_CamPos.zpos>pos.zpos)?(m_CamPos.zpos-pos.zpos):(pos.zpos-m_CamPos.zpos);
  48.     return dx+dz;
  49. }
  50. bool CCamera::IsEnemyInFrustum(VERTEX enemyPos)
  51. {
  52.     float cosValue=math.GetTwoVectorAngleCosine(NORMAL(enemyPos.xpos-m_CamPos.xpos,
  53.                                  enemyPos.ypos -m_CamPos.ypos,
  54.  enemyPos.zpos-m_CamPos.zpos ) , 
  55.  m_CamDirection);
  56. if(cosValue>0)  ///////// In camera
  57. {
  58. return true;
  59. }
  60.     return false; ///// out of camera
  61. }