www.pudn.com > 林海血原源代码.zip > Camera.cpp
// Camera.cpp: implementation of the CCamera class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Camera.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CCamera::CCamera()
{
m_CamPos=VERTEX(10,0,10);
m_CamDirection=NORMAL(1,0,0);
m_CamRotX=0;
m_CamRotY=-90;
m_CamRotZ=0;
m_VisualAngle=60;
}
CCamera::~CCamera()
{
}
void CCamera::UpdateCamera(VERTEX position,float rotX,float rotY,float rotZ)
{
m_CamPos=position;
m_CamRotX=rotX;
m_CamRotY=rotY;
m_CamRotZ=rotZ;
m_CamDirection=NORMAL(-cosf(rotX*0.0174533f)*sinf(rotY*0.0174533f),
sinf(rotX*0.0174533f),
-cosf(rotX*0.0174533f)*cosf(rotY*0.0174533f));
m_CamDirection=math.Normalization(m_CamDirection);
}
void CCamera::UpdateCamera(VERTEX newFoucs)
{
m_CamDirection=NORMAL(newFoucs.xpos-m_CamPos.xpos,newFoucs.ypos-m_CamPos.ypos,newFoucs.zpos-m_CamPos.zpos);
m_CamDirection=math.Normalization(m_CamDirection);
m_CamRotX=asinf(m_CamDirection.ny)*57.29578f;
m_CamRotY=acosf(-m_CamDirection.nz/(sqrt(m_CamDirection.nz*m_CamDirection.nz+m_CamDirection.nx*m_CamDirection.nx)))*57.29578f;
// m_CamRotY=float(57.29583f*acos(-m_CamDirection.nz/(sqrt(m_CamDirection.nz*m_CamDirection.nz+m_CamDirection.nx*m_CamDirection.nx))));
if(m_CamDirection.nx>0)m_CamRotY=360-m_CamRotY;
}
void CCamera::SetVisualAngle(float visualAngle)
{
m_VisualAngle=visualAngle;
}
float CCamera::GetAngleCosine(VERTEX point)
{
float cosValue=math.GetTwoVectorAngleCosine(NORMAL(point.xpos-m_CamPos.xpos,
point.ypos -m_CamPos.ypos,
point.zpos-m_CamPos.zpos ) ,
m_CamDirection);
if(cosValue>cosf(m_VisualAngle*0.0174533f))
{
return cosValue;
}
return 0;
}
bool CCamera::IsOnFoucs(VERTEX point)
{
return false;
}