📄 ch22p1_lensflare.h
字号:
#include "D3DHelperFuncs.h"
#include "AnimSequence.h"
#include "Camera.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_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1)
class CLensFlareSpot
{
public:
CLensFlareSpot();
CLensFlareSpot(LPDIRECT3DTEXTURE8 pTex, float fSize, float fLinePos, D3DXCOLOR Color);
virtual ~CLensFlareSpot();
void SetTexture(LPDIRECT3DTEXTURE8 pTexture) { m_pTexture = pTexture; }
LPDIRECT3DTEXTURE8 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:
LPDIRECT3DTEXTURE8 m_pTexture;
float m_fSize;
float m_fLinePos;
D3DXCOLOR m_Color;
};
class CLensFlare
{
public:
CLensFlare();
virtual ~CLensFlare();
HRESULT RestoreDeviceObjects(LPDIRECT3DDEVICE8 pDev);
void InvalidateDeviceObjects();
void Render(int iLightSourceX, int iLightSourceY, int iScreenWidth,
int iScreenHeight, bool bFirstOnly = false);
void Render(CCamera &camera, D3DXMATRIX matProj,
D3DXVECTOR3 vLightPos, int iScreenWidth, int iScreenHeight, bool bFirstOnly = false);
void CalcLightSourceScreenCoords(CCamera &camera, D3DXMATRIX matProj,
D3DXVECTOR3 vLightPos, int iScreenWidth, int iScreenHeight,
int &iCoordX, int &iCoordY, int &iCoordW);
void DeleteTextures();
void DeleteSpots();
LPDIRECT3DTEXTURE8 AddTexture(const char *strFilename);
void AddSpot(CLensFlareSpot &spot);
CMinMax<float> GetIntensity(void) const { return(m_fIntensity); }
void SetIntensity(const CMinMax<float> &data) { m_fIntensity = data; }
float GetIntensityBorder(void) const { return(m_fIntensityBorder); }
void SetIntensityBorder(const float data) { m_fIntensityBorder = data; }
protected:
CMinMax<float> m_fIntensity;
float m_fIntensityBorder;
HRESULT RecreateVB();
LPDIRECT3DVERTEXBUFFER8 m_pVBSpots;
int m_iVBSize;
LPDIRECT3DDEVICE8 m_pd3dDevice;
std::vector<LPDIRECT3DTEXTURE8> m_Textures;
std::vector<CLensFlareSpot> m_Spots;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -