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

📄 blois.h

📁 著名的GPU Gems中的自然效果模拟-水效果的演示程序及全部实现源代码
💻 H
字号:
//-----------------------------------------------------------------------------
// File: bLois.h
//
// Desc: Header file bLois sample app
//-----------------------------------------------------------------------------
#pragma once




//-----------------------------------------------------------------------------
// Defines, and constants
//-----------------------------------------------------------------------------
// TODO: change "DirectX AppWizard Apps" to your name or the company name
#define DXAPP_KEY        TEXT("Software\\DirectX AppWizard Apps\\bLois")

// Struct to store the current input state
struct UserInput
{
    // TODO: change as needed
    BOOL bRotateUp;
    BOOL bRotateDown;
    BOOL bRotateLeft;
    BOOL bRotateRight;
	BOOL bMoveForward;
	BOOL bMoveBack;
	BOOL bMoveUp;
	BOOL bMoveDown;
	BOOL bMoveLeft;
	BOOL bMoveRight;
};


class CompCosineParams
{
public:
	D3DXHANDLE			m_UTrans[16];
	D3DXHANDLE			m_Coef[16];
	D3DXHANDLE			m_ReScale;
	D3DXHANDLE			m_NoiseXform[4];
	D3DXHANDLE			m_ScaleBias;

	D3DXHANDLE			m_CosineLUT;
	D3DXHANDLE			m_BiasNoise;
};

class WaterParams
{
public:
	D3DXHANDLE			m_cWorld2NDC;
	D3DXHANDLE			m_cWaterTint;
	D3DXHANDLE			m_cFrequency;
	D3DXHANDLE			m_cPhase;
	D3DXHANDLE			m_cAmplitude;
	D3DXHANDLE			m_cDirX;
	D3DXHANDLE			m_cDirY;
	D3DXHANDLE			m_cSpecAtten;
	D3DXHANDLE			m_cCameraPos;
	D3DXHANDLE			m_cEnvAdjust;
	D3DXHANDLE			m_cEnvTint;
	D3DXHANDLE			m_cLocal2World;
	D3DXHANDLE			m_cLengths;
	D3DXHANDLE			m_cDepthOffset;
	D3DXHANDLE			m_cDepthScale;
	D3DXHANDLE			m_cFogParams;
	D3DXHANDLE			m_cDirXK;
	D3DXHANDLE			m_cDirYK;
	D3DXHANDLE			m_cDirXW;
	D3DXHANDLE			m_cDirYW;
	D3DXHANDLE			m_cKW;
	D3DXHANDLE			m_cDirXSqKW;
	D3DXHANDLE			m_cDirXDirYKW;
	D3DXHANDLE			m_cDirYSqKW;

	D3DXHANDLE			m_tEnvMap;
	D3DXHANDLE			m_tBumpMap;
};

struct FaceIndices
{
	unsigned short		m_Idx[3];
};
struct FaceSortData
{
	unsigned short		m_Idx;
	FLOAT				m_Dist;
};

//-----------------------------------------------------------------------------
// Name: class CMyD3DApplication
// Desc: Application class. The base class (CD3DApplication) provides the 
//       generic functionality needed in all Direct3D samples. CMyD3DApplication 
//       adds functionality specific to this sample program.
//-----------------------------------------------------------------------------
class CMyD3DApplication : public CD3DApplication
{
    BOOL                    m_bLoadingApp;          // TRUE, if the app is loading
    CD3DFont*               m_pFont;                // Font for drawing text

	BOOL					m_bShowHelp;
	BOOL					m_bDrawBump;
	FLOAT					m_LastToggle;
	BOOL					m_bSortWater;

    BYTE					m_bKey[256];
    D3DXMATRIXA16			m_matView;
    D3DXMATRIXA16			m_matPosition;
    D3DXMATRIXA16			m_matProjection;

    FLOAT                   m_fWorldRotX;           // World rotation state X-axis
    FLOAT                   m_fWorldRotY;           // World rotation state Y-axis

	D3DXVECTOR3				m_CamPos;
	D3DXVECTOR3				m_CamAt;
	D3DXVECTOR3				m_CamUp;

	// Water demo specifics follow
	ID3DXMesh*				m_WaterMesh;
	ID3DXMesh*				m_LandMesh;
	LPDIRECT3DTEXTURE9		m_LandTex;
	ID3DXMesh*				m_PillarsMesh;

	LPDIRECT3DCUBETEXTURE9	m_EnvMap;

	LPD3DXEFFECT			m_WaterEff;
	WaterParams				m_WaterParams;

	CompCosineParams		m_CompCosineParams;
	LPD3DXEFFECT			m_CompCosinesEff;
	LPDIRECT3DTEXTURE9		m_CosineLUT;
	LPDIRECT3DTEXTURE9		m_BiasNoiseMap;
	
	LPDIRECT3DTEXTURE9		m_BumpTex;
	LPDIRECT3DSURFACE9		m_BumpSurf;
	LPD3DXRENDERTOSURFACE	m_BumpRender;

	IDirect3DVertexBuffer9* m_BumpVBuffer;

	FaceIndices*			m_WaterIndices;
	D3DXVECTOR3*			m_WaterFacePos;
	FaceSortData*			m_WaterSortData;


	enum {
		kNumGeoWaves	= 4,
		kNumBumpPerPass = 4,
		kNumTexWaves	= 16,
		kNumBumpPasses	= kNumTexWaves / kNumBumpPerPass,
		kBumpTexSize	= 256
	};
	class TexWaveDesc
	{
	public:
		FLOAT		m_Phase;
		FLOAT		m_Amp;
		FLOAT		m_Len;
		FLOAT		m_Speed;
		FLOAT		m_Freq;
		D3DXVECTOR2	m_Dir;
		D3DXVECTOR2	m_RotScale;
		FLOAT		m_Fade;
	};
	TexWaveDesc		m_TexWaves[kNumTexWaves];

	class TexState
	{
	public:
		FLOAT		m_Noise;
		FLOAT		m_Chop;
		FLOAT		m_AngleDeviation;
		D3DXVECTOR2	m_WindDir;
		FLOAT		m_MaxLength;
		FLOAT		m_MinLength;
		FLOAT		m_AmpOverLen;
		FLOAT		m_RippleScale;
		FLOAT		m_SpeedDeviation;

		int			m_TransIdx;
		FLOAT		m_TransDel;
	};
	TexState		m_TexState;
	
	class GeoWaveDesc
	{
	public:
		FLOAT		m_Phase;
		FLOAT		m_Amp;
		FLOAT		m_Len;
		FLOAT		m_Freq;
		D3DXVECTOR2	m_Dir;
		FLOAT		m_Fade;
	};
	GeoWaveDesc		m_GeoWaves[kNumGeoWaves];

	class GeoState
	{
	public:
		FLOAT		m_Chop;
		FLOAT		m_AngleDeviation;
		D3DXVECTOR2	m_WindDir;
		FLOAT		m_MinLength;
		FLOAT		m_MaxLength;
		FLOAT		m_AmpOverLen;

		FLOAT		m_SpecAtten;
		FLOAT		m_SpecEnd;
		FLOAT		m_SpecTrans;

		FLOAT		m_EnvHeight;
		FLOAT		m_EnvRadius;
		FLOAT		m_WaterLevel;

		int			m_TransIdx;
		FLOAT		m_TransDel;
	};
	GeoState		m_GeoState;

	HRESULT			CreateCosineLUT();
	HRESULT			CreateBiasNoiseMap();
	HRESULT			CreateClearBuffer();

	HRESULT			CreateWaterMesh(ID3DXMesh* waterMesh);

	void GetCompCosineEffParams();
	void SetCompCosineEffParams();

	void GetWaterParams();
	void SetWaterParams();

	void InitTexState();
	void InitTexWave(int i);
	void InitTexWaves();
	void UpdateTexWave(int i, FLOAT dt);
	void UpdateTexWaves(FLOAT dt);

	void InitGeoState();
	void InitGeoWave(int i);
	void InitGeoWaves();
	void UpdateGeoWave(int i, FLOAT dt);
	void UpdateGeoWaves(FLOAT dt);

	void MoveOnInput();

	void ResetWater();
	void InitWaves();

	void RenderTexture();
	void RenderWater();
	void SortWaterMesh();

protected:
    virtual HRESULT OneTimeSceneInit();
    virtual HRESULT InitDeviceObjects();
    virtual HRESULT RestoreDeviceObjects();
    virtual HRESULT InvalidateDeviceObjects();
    virtual HRESULT DeleteDeviceObjects();
    virtual HRESULT Render();
    virtual HRESULT FrameMove();
    virtual HRESULT FinalCleanup();
    virtual HRESULT ConfirmDevice( D3DCAPS9*, DWORD, D3DFORMAT );

    HRESULT RenderText();

    void    UpdateInput( UserInput* pUserInput );

public:
    LRESULT MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
    CMyD3DApplication();
    virtual ~CMyD3DApplication();
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -