DragonNest/Common/EternityEngineSrv/EtCamera.cpp

73 lines
1.6 KiB
C++
Raw Normal View History

2024-12-19 09:48:26 +08:00
#include "StdAfx.h"
#include "EtCamera.h"
#include "EtConvexVolume.h"
DECL_MULTISMART_PTR_STATIC( CEtCamera, MAX_SESSION_COUNT, 1 )
STATIC_DECL_INIT( CEtCamera, EtCameraHandle, s_hActiveCamera );
CEtCamera::CEtCamera( CMultiRoom *pRoom )
: CMultiSmartPtrBase< CEtCamera, MAX_SESSION_COUNT>(pRoom)
{
m_fAspectRatio =0.0f;
}
CEtCamera::~CEtCamera(void)
{
}
void CEtCamera::Initialize( SCameraInfo *pCamera )
{
ASSERT( pCamera && "Invalid Camera Info" );
m_CameraInfo = *pCamera;
Reset();
}
void CEtCamera::Reset()
{
if( m_CameraInfo.Type == CT_PERSPECTIVE )
{
EtMatrixPerspectiveFovLH( &m_ProjMat, m_CameraInfo.fFOV, m_fAspectRatio, m_CameraInfo.fNear, m_CameraInfo.fFar );
}
else if( m_CameraInfo.Type == CT_ORTHOGONAL )
{
EtMatrixOrthoLH( &m_ProjMat, m_CameraInfo.fViewWidth, m_CameraInfo.fViewHeight, m_CameraInfo.fNear, m_CameraInfo.fFar );
}
else
{
ASSERT( 0 && "Invalid Camera Type!!!" );
}
EtMatrixIdentity( &m_ViewMat );
}
void CEtCamera::LookAt( EtVector3 &Eye, EtVector3 &At, EtVector3 &Up )
{
EtMatrixLookAtLH( &m_ViewMat, &Eye, &At, &Up );
}
EtMatrix *CEtCamera::GetViewProjMat()
{
static EtMatrix ViewProjMat;
return EtMatrixMultiply( &ViewProjMat, &m_ViewMat, &m_ProjMat );
}
void CEtCamera::CalcPositionAndDir( int nX, int nY, EtVector3 &Position, EtVector3 &Dir )
{
}
EtCameraHandle CEtCamera::Activate()
{
STATIC_INSTANCE(s_hActiveCamera) = GetMySmartPtr();
CalcInvViewMat();
return STATIC_INSTANCE(s_hActiveCamera);
}
EtCameraHandle CEtCamera::SetActiveCamera( CMultiRoom *pRoom, int nItemIndex )
{
return GetItem( pRoom, nItemIndex )->Activate();
}