www.pudn.com > snow.rar > LensFlare.h


#include "camera.h" 
#include "D3DHelperFuncs.h" 
#include "AnimSequence.h" 
#include "MinMax.h" 
// Our custom lens flare FVF 
typedef struct  
{ 
  D3DXVECTOR3 position; // The position 
	float       rhw; 
  D3DCOLOR    color;    // The color 
	float       tu, tv; 
} VERTEX_LENSFLARE; 
 
#define D3DFVF_LENSFLARE (D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1) 
 
class CLensFlareSpot 
{ 
public: 
	CLensFlareSpot(); 
	CLensFlareSpot(LPDIRECT3DTEXTURE9 pTex, float fSize, float fLinePos, D3DXCOLOR Color); 
	 
	virtual ~CLensFlareSpot(); 
 
	void SetTexture(LPDIRECT3DTEXTURE9 pTexture) { m_pTexture = pTexture; } 
	LPDIRECT3DTEXTURE9 GetTexture(void) { return(m_pTexture); } 
 
	float GetSize(void) const { return(m_fSize); } 
	void SetSize(const float data) { m_fSize = data; } 
 
	float GetLinePos(void) const { return(m_fLinePos); } 
	void SetLinePos(const float data) { m_fLinePos = data; } 
 
  D3DXCOLOR GetColor(void) const { return(m_Color); } 
  void SetColor(const D3DXCOLOR &data) { m_Color = data; } 
		 
protected: 
	LPDIRECT3DTEXTURE9 m_pTexture; 
	float m_fSize; 
	float m_fLinePos; 
  D3DXCOLOR m_Color; 
 
}; 
 
class CLensFlare 
{ 
public: 
	CLensFlare(); 
	virtual ~CLensFlare(); 
 
	HRESULT RestoreDeviceObjects(LPDIRECT3DDEVICE9 pDev); 
	void InvalidateDeviceObjects(); 
 
	void Render(int iLightSourceX, int iLightSourceY, int iScreenWidth,  
		int iScreenHeight, bool bFirstOnly = false); 
	void Render(Camera &m_camera, D3DXMATRIX matProj,  
		D3DXVECTOR3 vLightPos, int iScreenWidth, int iScreenHeight, bool bFirstOnly = false); 
 
	void CalcLightSourceScreenCoords(Camera &m_camera, D3DXMATRIX matProj, 
	  D3DXVECTOR3 vLightPos, int iScreenWidth, int iScreenHeight, 
		int &iCoordX, int &iCoordY, int &iCoordW); 
 
	void DeleteTextures(); 
	void DeleteSpots(); 
 
	LPDIRECT3DTEXTURE9 AddTexture(const char *strFilename); 
	void AddSpot(CLensFlareSpot &spot); 
 
	CMinMax GetIntensity(void) const { return(m_fIntensity); } 
	void SetIntensity(const CMinMax &data) { m_fIntensity = data; } 
	 
	float GetIntensityBorder(void) const { return(m_fIntensityBorder); } 
	void SetIntensityBorder(const float data) { m_fIntensityBorder = data; } 
 
protected: 
	CMinMax m_fIntensity; 
	float m_fIntensityBorder; 
 
	HRESULT RecreateVB(); 
 
  LPDIRECT3DVERTEXBUFFER9 m_pVBSpots; 
	int m_iVBSize; 
  LPDIRECT3DDEVICE9 m_pd3dDevice; 
   
	std::vector m_Textures; 
	std::vector m_Spots; 
	 
};