290 lines
6.8 KiB
C++
290 lines
6.8 KiB
C++
#ifndef __KRENDEROBJECT__
|
|
#define __KRENDEROBJECT__
|
|
|
|
#include "KObject.h"
|
|
#include "KPrimitiveMesh.h"
|
|
#include "KPrimitiveFXParticle.h"
|
|
#include "K3DBound.h"
|
|
|
|
class KViewportObject;
|
|
class K3DRenderDeviceDX;
|
|
//class K3DFrustum;
|
|
|
|
// "SETFORCERENDER_FLAG"
|
|
|
|
/// TODO : Utill 로 통합
|
|
void AxisCalculation( const K3DMatrix & mat, K3DVector & v1, K3DVector & v2, K3DVector & v3, float fLen = 0.5f );
|
|
|
|
class KMsgGET_PERFORMANCEINFO : public KArg
|
|
{
|
|
public:
|
|
KMsgGET_PERFORMANCEINFO():nSeqCount(0), nMeshCount(0) { }
|
|
|
|
int nSeqCount;
|
|
int nMeshCount;
|
|
std::vector< std::string > vVertexList;
|
|
std::vector< std::string > vTexList;
|
|
};
|
|
|
|
class KRenderObject : public KObject
|
|
{
|
|
public:
|
|
KRenderObject(void);
|
|
virtual ~KRenderObject(void);
|
|
|
|
void SetRenderState( DWORD dwRS )
|
|
{
|
|
m_dwRS = dwRS;
|
|
}
|
|
DWORD GetRenderState()
|
|
{
|
|
return m_dwRS;
|
|
}
|
|
|
|
bool IsTransparent()
|
|
{
|
|
return m_bIsTransparent;
|
|
}
|
|
float GetZOrder()
|
|
{
|
|
return m_vPosition.z;
|
|
}
|
|
|
|
void SetPosition( const K3DVector &pos )
|
|
{
|
|
m_vPosition = pos;
|
|
}
|
|
void SetPosition( float x, float y, float z = 0.f )
|
|
{
|
|
m_vPosition.x = x;
|
|
m_vPosition.y = y;
|
|
m_vPosition.z = z;
|
|
}
|
|
const K3DVector &GetPosition()
|
|
{
|
|
return m_vPosition;
|
|
}
|
|
virtual void SetVisibility( float fVisibility )
|
|
{
|
|
m_fMasterVisibility = fVisibility;
|
|
}
|
|
float GetVisibility()
|
|
{
|
|
return m_fMasterVisibility;
|
|
}
|
|
|
|
virtual void SetSkinDiffuse( KColor & diffuse )
|
|
{
|
|
m_SkinDiffuse = diffuse;
|
|
}
|
|
|
|
virtual void ClipTest( const K3DVector* pFrustrum)
|
|
{
|
|
m_bIsClip = true;
|
|
}
|
|
|
|
virtual bool GetIsClip()
|
|
{
|
|
return m_bIsClip;
|
|
}
|
|
|
|
virtual const char* GetName()
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
enum
|
|
{
|
|
RENDEREFX_NONE = 0,
|
|
RENDEREFX_NOLIGHT = 1,
|
|
RENDEREFX_NOFOG = 2,
|
|
RENDEREFX_SKY = 3,
|
|
RENDEREFX_LENSFLARE = 4,
|
|
RENDEREFX_CLOUD = 5,
|
|
RENDEREFX_WEATHER = 6, // [sonador]
|
|
RENDEREFX_LIGHTNING = 7, // [sonador][2007.04.12]
|
|
RENDEREFX_TERRAIN = 8,
|
|
RENDEREFX_PROP = 9,
|
|
RENDEREFX_BUILDING = 10,
|
|
RENDEREFX_PROP_NOMIP = 11,
|
|
RENDEREFX_SPEEDTREE_BRANCH = 12,
|
|
RENDEREFX_SPEEDTREE_FROND = 13,
|
|
RENDEREFX_SPEEDTREE_LEAF = 14,
|
|
RENDEREFX_WATER = 15,
|
|
RENDEREFX_SHADOW = 16,
|
|
RENDEREFX_LIGHTMAP = 17,
|
|
RENDEREFX_UVWRAP = 18,
|
|
RENDEREFX_SHADOW_TERRAIN = 19,
|
|
RENDEREFX_PROP_HAS_STOOL = 20,
|
|
RENDEREFX_BUILDING_HAS_STOOL = 21,
|
|
|
|
RENDEREFX_PROP_NOCA_NORE = 22,
|
|
RENDEREFX_PROP_NOCA_RE = 23,
|
|
RENDEREFX_PROP_DYCA_NORC = 24,
|
|
RENDEREFX_PROP_DYCA_RE = 25,
|
|
RENDEREFX_PROP_STCA_NORC = 26,
|
|
RENDEREFX_PROP_STCA_RE = 27,
|
|
|
|
RENDEREFX_BUILDING_NOCA_NORE = 28,
|
|
RENDEREFX_BUILDING_NOCA_RE = 29,
|
|
RENDEREFX_BUILDING_DYCA_NORC = 30,
|
|
RENDEREFX_BUILDING_DYCA_RE = 31,
|
|
RENDEREFX_BUILDING_STCA_NORC = 32,
|
|
RENDEREFX_BUILDING_STCA_RE = 33,
|
|
|
|
RENDEREFX_SPEEDTREE_BILLBOARD = 34, ///< 위로 올리는 게 보기 좋겠지..
|
|
|
|
RENDEREFX_LOADINGSCREEN = 35,
|
|
//RENDEREFX_PATHEFFECT = 34,
|
|
|
|
RENDEREFX_QUAD = 36,
|
|
RENDEREFX_LINE = 37,
|
|
RENDEREFX_POLYLINE = 38,
|
|
|
|
RENDEREFX_SPEEDGRASS = 39,
|
|
|
|
RENDEREFX_AFTER_SPRITE = 40, ///< Sprite 다음
|
|
|
|
RENDEREFX_AURORA = 41,
|
|
|
|
RENDEREFX_SELECT = 42,
|
|
RENDEREFX_MAX
|
|
};
|
|
virtual void Render( KViewportObject *viewport, DWORD flag = RENDEREFX_NONE, const K3DMatrix * pAttachMat = NULL ) = 0;
|
|
|
|
protected:
|
|
bool m_bIsTransparent;
|
|
bool m_bIsClip;
|
|
K3DVector m_vPosition;
|
|
DWORD m_dwRS;
|
|
float m_fMasterVisibility;
|
|
KColor m_SkinDiffuse; ///< 피부 디퓨즈
|
|
};
|
|
|
|
class KSeqObject : public KRenderObject
|
|
{
|
|
public:
|
|
KSeqObject();
|
|
virtual ~KSeqObject();
|
|
|
|
virtual void Reset() { }
|
|
virtual void SetTime( DWORD time )
|
|
{
|
|
m_dwTime = time;
|
|
}
|
|
DWORD GetCurTime()
|
|
{
|
|
return m_dwTime;
|
|
}
|
|
const KInterval &GetInterval()
|
|
{
|
|
return m_interval;
|
|
}
|
|
// 임시 코드 by blackfish ->
|
|
KInterval& GetIntervalRef()
|
|
{
|
|
return m_interval;
|
|
}
|
|
// <- 임시 코드 by blackfish
|
|
virtual void SetColor( DWORD c1, DWORD c2 = 0, DWORD c3 = 0, DWORD c4 = 0, short nMode = 0 ) {}
|
|
virtual void SetDeform( KSeqObject * pMeshSeq ) { }
|
|
virtual void SetAttach( int nAttachIndex, KSeqObject * pMeshSeq ) { }
|
|
virtual void SetAttachEffectPos( int nEffectPosIndex, KSeqObject * pMeshSeq ) { }
|
|
virtual void SetAttachEffectBone( int nBoneIndex, KSeqObject * pMeshSeq ) { }
|
|
|
|
virtual void SetParentTransform( const K3DMatrix *pMatParent, const K3DMatrix *pMatAttach = NULL, BOOL bRotationLock = FALSE )
|
|
{
|
|
// _oprint( "SetParentTransform 여기에\n" );
|
|
m_pMatParent = pMatParent;
|
|
m_pMatAttach = pMatAttach;
|
|
m_bRotationLock = bRotationLock;
|
|
}
|
|
const K3DMatrix *GetParentTransform()
|
|
{
|
|
return m_pMatParent;
|
|
}
|
|
const K3DMatrix *GetAttachTransform()
|
|
{
|
|
return m_pMatAttach;
|
|
}
|
|
virtual void SetAlterMaterial( K3DMaterial *mat ) { }
|
|
|
|
virtual KSeqObject* Clone() = 0;
|
|
virtual void realizeTime() = 0;
|
|
protected:
|
|
|
|
protected:
|
|
DWORD m_dwTime;
|
|
DWORD m_dwRealizedTime;
|
|
KInterval m_interval;
|
|
const K3DMatrix* m_pMatParent; ///< 부모의 위치
|
|
const K3DMatrix* m_pMatAttach; ///< 부모의 특정 뼈위치
|
|
|
|
BOOL m_bRenderFlag;
|
|
BOOL m_bRotationLock;
|
|
};
|
|
|
|
struct KSeqPropAttrib
|
|
{
|
|
std::string strName;
|
|
std::string strValue;
|
|
};
|
|
|
|
struct KSeqProp
|
|
{
|
|
std::string strName;
|
|
std::vector< KSeqPropAttrib > vAttribs;
|
|
};
|
|
|
|
class KSequencer : public KSeqObject
|
|
{
|
|
public:
|
|
KSequencer( bool bCreateByManager = false );
|
|
virtual ~KSequencer();
|
|
|
|
virtual void Reset();
|
|
void AddSeqObject( KSeqObject *obj );
|
|
|
|
int GetSeqObjectCount();
|
|
KSeqObject *GetSeqObject( int index );
|
|
|
|
void SetName( const char *resname );
|
|
const char* GetName();
|
|
|
|
virtual void SetParentTransform( const K3DMatrix *pMatParent, const K3DMatrix *pMatAttach = NULL, BOOL bRotationLock = FALSE );
|
|
|
|
virtual void SetAlterMaterial( K3DMaterial *mat );
|
|
|
|
virtual void SetColor( DWORD c1, DWORD c2 = 0, DWORD c3 = 0, DWORD c4 = 0, short nMode = 0 );
|
|
virtual void *Perform( KID id, KArg& msg );
|
|
virtual void Process( DWORD time );
|
|
|
|
virtual void ClipTest( const K3DVector* pFrustrum);
|
|
virtual bool GetIsClip();
|
|
|
|
virtual void Render( KViewportObject *viewport, DWORD flag = RENDEREFX_NONE, const K3DMatrix * pAttachMat = NULL );
|
|
|
|
virtual void SetDeform( KSeqObject * pMeshSeq );
|
|
virtual void SetAttach( int nAttachIndex, KSeqObject * pMeshSeq );
|
|
virtual void SetAttachEffectPos( int nEffectPosIndex, KSeqObject * pMeshSeq );
|
|
virtual void SetAttachEffectBone( int nBoneIndex, KSeqObject * pMeshSeq );
|
|
|
|
virtual KSequencer* CloneSequence();
|
|
virtual KSeqObject* Clone();
|
|
virtual void realizeTime();
|
|
|
|
void LoadProp( const char* szPropStr );
|
|
const char* GetAttribValue( const char* szPropName, const char* szAttribName);
|
|
|
|
protected:
|
|
bool CreateNewProp( const char*& pPropStr );
|
|
bool LoadPropAttrib( KSeqProp& rProp, const char*& pPropStr );
|
|
|
|
bool m_bCreateByMgr;
|
|
std::string m_strResName;
|
|
std::vector< KSeqProp > m_vProps;
|
|
std::vector<KSeqObject*> m_vecSeqObjects;
|
|
};
|
|
|
|
|
|
#endif |