⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch22p1_lensflare.h

📁 游戏开发特殊技巧-special.effects.game.programming
💻 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 + -