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;
};