/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.12.20 * ³» ¿ë : Ä«¸Þ¶ó * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once /// Ä«¸Þ¶ó ////////////////////////////////////////////////////////////////////////// // Y Z // NI: |__ Z MAX(APP): |__ X // / / // -X -Y ////////////////////////////////////////////////////////////////////////// class cCamera { friend class cCameraManager; static const unsigned int MIN_NEAR_DIST = 1; static const unsigned int MAX_FAR_DIST = 200000; public: cCamera(); virtual ~cCamera(); /// ÃʱâÈ­ ¹× Á¾·á virtual bool Init( unsigned int screenWidth, unsigned int screenHeight ); /// Ä«¸Þ¶óÀÇ À§Ä¡ ¹æÇâ Á¤º¸¸¦ ¸®¼Â virtual void Reset(){}// = 0; /// °»½Å void Update( float time ); /// ±Ù°Å¸® float GetNearDistance() const; /// ¿ø°Å¸® void SetFarDistance( float farDist ); float GetFarDistance() const; /// ½Ã¾ß °¢»Ô´ë void SetViewFrustum( unsigned int screenWidth, unsigned int screenHeight ); void SetViewFrustum( unsigned int screenWidth, unsigned int screenHeight, float fovyDegree, float nearDist, float farDist ); void SetViewFrustum( float left, float right, float top, float bottom, float nearDist, float farDist ); void SetOrtho( bool ortho ); bool GetOrtho() const; /// ºäÆ÷Æ® void SetViewPort( float left = 0, float right = 1, float top = 1, float bottom = 0 ); /// À̵¿ void Translate( const NiPoint3& move ); void SetTranslate( const NiPoint3& trans ); void SetTranslate( float x, float y, float z ); const NiPoint3& GetWorldTranslate() const; /// ȸÀü void Rotate( const NiPoint3& axis, float angle ); void SetRotate( const NiMatrix3& rot ); void Pitch( float angle ); void Yaw( float angle ); const NiMatrix3& GetWorldRotate() const; /// ¹æÇâ NiPoint3 GetWorldDirection() const; NiPoint3 GetWorldUpVector() const; NiPoint3 GetWorldRightVector() const; /// ¼Ó·Â void SetTranslateSpeed( float unitsPerSec ); void SetRotateSpeed( float anglesPerSec ); /// Á¾È¾ºñ float GetAspectRatio() const; /// ¸¶¿ì½º ÁÂÇ¥¿¡ ÇØ´çÇÏ´Â ¹ÝÁ÷¼± bool GetRayFromWindowPoint( long mouseX, long mouseY, NiPoint3& origin, NiPoint3& dir ) const; /// ¿£Áø Ä«¸Þ¶ó·Î Çüº¯È¯ operator NiCamera*() const { return mNiCamera; } protected: /// ó¸® virtual void OnProcess( float time ); virtual void OnProcessInput( float time ) = 0; protected: /// È­¸é Å©±â unsigned int mScreenWidth; unsigned int mScreenHeight; /// ¼öÁ÷ ½Ã¾ß°¢ float mFovyDegree; /// ±Ù°Å¸® float mNearDistance; /// ¿ø°Å¸® float mFarDistance; /// Á¾È¾ºñ float mAspectRatio; /// ÁÂ, ¿ì, »ó, ÇÏ float mLeft, mRight, mTop, mBottom; /// Á÷±³ ¸ðµå ¿©ºÎ bool mOrtho; /// ¿£Áø Ä«¸Þ¶ó NiCameraPtr mNiCamera; /// Ä«¸Þ¶ó º¯È¯¿ë ³ëµå NiNodePtr mOrientNode; /// ¸®½º³Ê ºÎÂø¿ë ³ëµå NiNodePtr mListenerNode; /// ¼Ó·Â float mTranslateSpeed; float mRotateSpeed; }; inline void cCamera::Update( float time ) { mOrientNode->Update( time ); } inline void cCamera::SetTranslateSpeed( float unitsPerSec ) { mTranslateSpeed = unitsPerSec; } inline void cCamera::SetRotateSpeed( float anglesPerSec ) { mRotateSpeed = anglesPerSec; } inline void cCamera::SetOrtho( bool ortho ) { mOrtho = ortho; } inline bool cCamera::GetOrtho() const { return mOrtho; } inline const NiPoint3& cCamera::GetWorldTranslate() const { return mNiCamera->GetWorldTranslate(); } inline const NiMatrix3& cCamera::GetWorldRotate() const { return mNiCamera->GetWorldRotate(); } inline NiPoint3 cCamera::GetWorldDirection() const { return mNiCamera->GetWorldDirection(); } inline NiPoint3 cCamera::GetWorldUpVector() const { return mNiCamera->GetWorldUpVector(); } inline NiPoint3 cCamera::GetWorldRightVector() const { return mNiCamera->GetWorldRightVector(); } inline bool cCamera::GetRayFromWindowPoint( long mouseX, long mouseY, NiPoint3& origin, NiPoint3& dir ) const { return mNiCamera->WindowPointToRay( mouseX, mouseY, origin, dir ); } inline float cCamera::GetNearDistance() const { return mNearDistance; } inline float cCamera::GetFarDistance() const { return mFarDistance; } inline float cCamera::GetAspectRatio() const { return mAspectRatio; }