/* ========================================================================== * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2007.01.23 * ³» ¿ë : Á¶¸í Àå¸é ³ëµå * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "SceneNode.h" class cTerrainLeafNode; /// Á¶¸í Àå¸é ³ëµå ÀÎÀÚ class cLightSceneNodeParam : public cSceneNodeParam { public: cLightSceneNodeParam(); public: /// ¹ÝÁö¸§ float mRadius; /// ÁÖº¯»ö NiColor mAmbient; /// »ê¶õ»ö NiColor mDiffuse0; NiColor mDiffuse1; float mDiffuseAnimTime; bool mFlickering; /// ¹Ý»ç»ö NiColor mSpecular; /// °¨¼è °è¼ö float mConstantAtten0; float mConstantAtten1; float mConstantAttenAnimTime; float mLinearAtten; float mQuadricAtten; }; inline cLightSceneNodeParam::cLightSceneNodeParam() : mRadius( 300.0f ) , mAmbient( NiColor::BLACK ) , mDiffuse0( NiColor::WHITE ) , mDiffuse1( NiColor::WHITE ) , mDiffuseAnimTime( 0.0f ) , mFlickering( false ) , mSpecular( NiColor::WHITE ) , mConstantAtten0( 0.0f ) , mConstantAtten1( 0.0f ) , mConstantAttenAnimTime( 0.0f ) , mLinearAtten( 0.0f ) , mQuadricAtten( 0.000001f ) { mQueryType = NiPick::QUERY_FIRST; mPickSort = NiPick::SORT_OFF; mPickIntersect = NiPick::INTERSECT_BOUND; mPickFrontOnly = false; } /// Á¶¸í Àå¸é ³ëµå class cLightSceneNode : public cSceneNode { friend class cSceneManager; friend class cLightEditor; public: /// ó¸® void OnProcess( unsigned long deltaTime, unsigned long accumTime ); /// ÇÈÅ· bool Pick( const cRay& ray ); /// Áß½ÉÁ¡ virtual const NiPoint3& GetCenter(); /// ¹ÝÁö¸§ void SetRadius( float radius ); virtual float GetRadius(); /// Àå¸é ³ëµå¸¦ Å»ºÎÂø void Attach( cSceneNode* node ); void Detach( cSceneNode* node ); void Detach( cTerrainLeafNode* node ); /// ÁÖº¯±¤ const NiColor& GetAmbient() const; /// »ê¶õ±¤ const NiColor& GetDiffuse() const; /// °¨¼è °è¼ö float GetConstantAtten() const; float GetLinearAtten() const; float GetQuadricAtten() const; virtual inline NiNode* GetNiNode() { return 0; } virtual inline NiAVObject* GetNiObj() { return (NiAVObject*)mLight; } protected: cLightSceneNode( eType type = eLIGHT ); virtual ~cLightSceneNode(); /// ÃʱâÈ­ virtual bool Init( const cLightSceneNodeParam& param ); /// ÁÖº¯±¤ void SetAmbient( const NiColor& color ); /// »ê¶õ±¤ void SetDiffuse0( const NiColor& color ); void SetDiffuse1( const NiColor& color ); const NiColor& GetDiffuse0() const; const NiColor& GetDiffuse1() const; /// ¹Ý»ç±¤ void SetSpecular( const NiColor& color ); const NiColor& GetSpecular() const; /// °¨¼è °è¼ö void SetConstantAtten0( float value ); void SetConstantAtten1( float value ); void SetLinearAtten( float value ); void SetQuadricAtten( float value ); float GetConstantAtten0() const; float GetConstantAtten1() const; protected: /// ¿£Áø ³ëµå NiPointLightPtr mLight; /// ¹ÝÁö¸§ float mRadius; /// »ê¶õ±¤ NiColor mDiffuse0; NiColor mDiffuse1; float mDiffuseAnimTime; float mDiffuseTime; bool mDiffuseDir; bool mFlickering; /// °¨¼è float mConstantAtten0; float mConstantAtten1; float mConstantAttenAnimTime; float mConstantAttenTime; bool mConstantAttenDir; /// ¿µÇâ¹Þ´Â ³ëµå ™V typedef tHashSet cAffectedSet; cAffectedSet mAffectedSet; /// ÁöÇü ³ëµå ¹è¿­ typedef tArray cTerrainArray; cTerrainArray mTerrainArray; }; inline const NiPoint3& cLightSceneNode::GetCenter() { return mLight->GetWorldTranslate(); } inline void cLightSceneNode::SetRadius( float radius ) { mNeedUpdateTransform = true; mRadius = radius; } inline float cLightSceneNode::GetRadius() { return mRadius; } inline const NiColor& cLightSceneNode::GetAmbient() const { return mLight->GetAmbientColor(); } inline const NiColor& cLightSceneNode::GetDiffuse() const { return mLight->GetDiffuseColor(); } inline const NiColor& cLightSceneNode::GetDiffuse0() const { return mDiffuse0; } inline const NiColor& cLightSceneNode::GetDiffuse1() const { return mDiffuse1; } inline const NiColor& cLightSceneNode::GetSpecular() const { return mLight->GetSpecularColor(); } inline float cLightSceneNode::GetConstantAtten() const { return mLight->GetConstantAttenuation(); } inline float cLightSceneNode::GetConstantAtten0() const { return mConstantAtten0; } inline float cLightSceneNode::GetConstantAtten1() const { return mConstantAtten1; } inline float cLightSceneNode::GetLinearAtten() const { return mLight->GetLinearAttenuation(); } inline float cLightSceneNode::GetQuadricAtten() const { return mLight->GetQuadraticAttenuation(); }