73 lines
1.6 KiB
C++
73 lines
1.6 KiB
C++
|
|
#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();
|
||
|
|
}
|
||
|
|
|