100 lines
2.6 KiB
C++
100 lines
2.6 KiB
C++
#pragma once
|
|
|
|
// shadow용 ViewPort
|
|
|
|
#include "SViewPort.h"
|
|
#include <toolkit/XFlag.h>
|
|
#include <dump/XException.h>
|
|
#include "KRenderObject.h"
|
|
|
|
#include "KSortVector.h"
|
|
|
|
class K3DVertexBuffer;
|
|
class KMeshPrimitive;
|
|
|
|
class SShadowViewPort : public SViewPort, public SRenderTargetContainer
|
|
{
|
|
public:
|
|
static float SHADOW_RATIO;
|
|
|
|
SShadowViewPort( bool bClearColorBuffer = true, bool bClearDepthBuffer = true );
|
|
virtual ~SShadowViewPort();
|
|
|
|
virtual void Initilaize( K3DRenderDevice *dev, const KViewportStruct &viewarea, float nearClip, float farClip );
|
|
|
|
virtual void SetCamera( const K3DCamera *cam );
|
|
virtual void Register( K3DPrimitive *pr, DWORD flag );
|
|
virtual void ClearRegisteredList();
|
|
|
|
virtual void Render( bool bClearRegister = true, bool bSetRenderTarget = true );
|
|
|
|
virtual K3DRenderTarget * GetRenderTarget(int index, void* pr);
|
|
|
|
void SetShadowBottomHeight(float height);
|
|
float GetShadowBottomHeight() { return m_fShadowBottomHeight; }
|
|
K3DVector GetShadowBase()
|
|
{
|
|
return K3DVector(GetCameraTargetPos().x - SHADOW_RATIO/2,
|
|
GetCameraTargetPos().y - SHADOW_RATIO/2,
|
|
GetShadowBottomHeight());
|
|
}
|
|
bool IsShadowValid() { return m_bIsValid; }
|
|
|
|
//void SetUseSpecular( bool bUseSpecular );
|
|
//void SetUseShadowBuffer( bool bUseShadowBuffer) { m_bUseShadowBuffer = bUseShadowBuffer; }
|
|
void SetShadowBufferQuality(int nQuality);
|
|
void SetShadowMapQuality(int nQuality);
|
|
void SetJitterMapQuality(int nQuality);
|
|
|
|
void ClearAllShadowMap();
|
|
void ReCreateAllShadowMap();
|
|
#ifndef NDEBUG
|
|
void SetDebugMode( bool bDebugMode ) { m_bDebugMode = bDebugMode; }
|
|
#endif
|
|
|
|
//void SetGameViewport( SViewPort* pViewport) { m_pGameViewport = pViewport; }
|
|
int GetShadowBufferQuality();
|
|
|
|
protected:
|
|
|
|
void DrawObjectAsShadowBuffer( KSortVector< RENDER_MESHEX > & vList );
|
|
void DrawObjectAsShadow( KSortVector< RENDER_MESHEX > & vList );
|
|
|
|
KSortVector< RENDER_MESHEX > m_vRenderList;
|
|
|
|
float m_fShadowBottomHeight;
|
|
|
|
bool RenderShadowMap();
|
|
bool RenderShadowBuffer();
|
|
|
|
bool m_bIsValid;
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//쉐도우 맵 관련
|
|
|
|
K3DVector m_vCameraTargetPos_Backup;
|
|
|
|
void UpdateMatrices(void);
|
|
|
|
//Shadow====================================
|
|
K3DRenderTargetSPtr m_spShadowMap;
|
|
K3DRenderTargetSPtr m_spShadowJitterMap;
|
|
K3DRenderTargetSPtr m_spShadowBuffer;
|
|
|
|
#ifndef NDEBUG
|
|
bool m_bDebugMode;
|
|
#endif
|
|
|
|
//Test 용===================================
|
|
|
|
K3DVertexBufferSPtr m_spShadowVB;
|
|
int m_nShadowStride;
|
|
|
|
//bool m_bUseShadowBuffer;
|
|
int m_nShadowBufferQuality;
|
|
int m_nShadowMapQuality;
|
|
int m_nJitterMapQuality;
|
|
|
|
//SViewPort* m_pGameViewport;
|
|
};
|