51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include "EtShadowMap.h"
|
|
#include "EtPrimitive.h"
|
|
|
|
struct SPolygon
|
|
{
|
|
std::vector< EtVector3 > Polygon;
|
|
};
|
|
|
|
class CEtLiSPShadowMap : public CEtShadowMap
|
|
{
|
|
public:
|
|
CEtLiSPShadowMap(void);
|
|
virtual ~CEtLiSPShadowMap(void);
|
|
void Clear();
|
|
|
|
protected:
|
|
SAABox m_SceneBox;
|
|
std::vector< EtVector3 > m_vecFocusRegion;
|
|
EtVector3 m_NearCameraPoint;
|
|
|
|
EtVector3 m_CamPos;
|
|
EtVector3 m_CamDir;
|
|
EtVector3 m_LightDir;
|
|
|
|
public:
|
|
void Initialize( ShadowQuality Quality );
|
|
|
|
void CalcFrustumPoly( std::vector< SPolygon > &vecPolygon );
|
|
void ClipFrustumBySceneBox( std::vector< SPolygon > &vecPolygon );
|
|
void ClipPolygonByPlane( std::vector< EtVector3 > &Polygon, EtVector4 &Plane,
|
|
std::vector< EtVector3 > &PolyOut, std::vector< EtVector3 > &PolyIntersect );
|
|
void ClosePolygon( std::vector< EtVector3 > &PolyOut, std::vector< SPolygon > &IntersectEdges, EtVector4 &Plane );
|
|
void ClipFrustumByPlane( std::vector< SPolygon > &vecPolygon, EtVector4 &Plane, std::vector< SPolygon > &vecOutput );
|
|
void CalcNearCameraPoint();
|
|
void GetSCameraInfo();
|
|
void CalcFocusRegion();
|
|
void CalcLightSpaceViewProjDir( EtVector3 &LightSpaceViewProjDir );
|
|
void CalcZ0LS( EtVector3 &Output, EtMatrix &LightSpaceMat, float fBoxMaxZ );
|
|
float CalcNParam( EtMatrix &LightSpaceMat, SAABox &Box );
|
|
void CalcLiSPSMat();
|
|
void RescaleShadowMat();
|
|
void CalcUpVec( EtVector3 &Output );
|
|
void CalcShadowMat();
|
|
|
|
void BeginShadow();
|
|
void EndShadow();
|
|
};
|
|
|
|
//void CreateLiSPSahdowMap( ShadowQuality Quality );
|