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

📄 shader_brdf.h

📁 游戏编程精华02-含有几十个游戏编程例子
💻 H
字号:
/*********************************************************************NVMH2****
Path:  E:\devrel\NV_SDK_4\DX8\NVEffectsBrowser\Effects\BRDF
File:  shader_BRDF.h

Copyright (C) 1999, 2000 NVIDIA Corporation
This file is provided without support, instruction, or implied warranty of any
kind.  NVIDIA makes no guarantee of its fitness for a particular purpose and is
not liable under any circumstances for any damages or loss whatsoever arising
from the use or inability to use this file or items derived from it.

Comments:


******************************************************************************/


#ifndef SHADER_BRDF_H
#define SHADER_BRDF_H
#include "MouseUI.h"

#define NUM_OBJECTS 2

typedef enum ROTATEENUM {
	WOMAN_OBJECT = 0,
	LIGHT_OBJECT = 1
} ROTATEENUM;

char *LoadObjects[NUM_OBJECTS] = { "woman.x",
								  "dirLight.x"
								};

//BRDFVertex
struct TSVertex
{
	D3DXVECTOR3 Position;
	D3DXVECTOR3 Normal;
	D3DXVECTOR2 Texture0;         //texcoord for stage 0
};

#define TSVERTEX_FVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0))

typedef enum tageBRDFDisplayOptions
{
	BRDFDISPLAY_MINNAERT = 0,
	BRDFDISPLAY_SHADING = 1,
	BRDFDISPLAY_SILHOUETTESANDSHADING = 2
} eBRDFDisplayOptions;

class CShaderBRDF : public EBEffect
{
public:	
	CShaderBRDF();
	~CShaderBRDF();
	
	virtual void    UpdateProperties();
	virtual HRESULT Initialize(IDirect3DDevice8* pDev);
	virtual HRESULT Free();
	virtual HRESULT Start();
	virtual HRESULT Tick(EBTimer* pTimer);
	virtual HRESULT ConfirmDevice(D3DCAPS8* pCaps, DWORD dwBehavior, D3DFORMAT Format);
	virtual void MouseMove(HWND hWnd, int x, int y);
	virtual void MouseButton(HWND hWnd, eButtonID Button, bool bDown, int x, int y);
	virtual void Keyboard(DWORD dwKey, UINT nFlags, bool bDown);
	
private:
	LPDIRECT3DVERTEXBUFFER8	m_pVertexBuffer[NUM_OBJECTS];
	LPDIRECT3DINDEXBUFFER8  m_pIndexBuffer[NUM_OBJECTS];
	D3DXVECTOR3				m_ObjectCenter[NUM_OBJECTS];
	float					m_ObjectRadius[NUM_OBJECTS];
	D3DXATTRIBUTERANGE		*m_pAttributes[NUM_OBJECTS];
	ID3DXBuffer				*m_pMaterials[NUM_OBJECTS];
	D3DXMATRIX				m_MatObject[NUM_OBJECTS];
	DWORD					m_dwCurrentVShader[NUM_OBJECTS];
	DWORD					m_dwCurrentPShader[NUM_OBJECTS];
	//number of sections in the mesh
	DWORD					m_dwNumSections[NUM_OBJECTS];
	int						m_SaveMouse_X[NUM_OBJECTS];
	int						m_SaveMouse_Y[NUM_OBJECTS];
	bool					m_SaveMouse_bDown[NUM_OBJECTS];

	LPDIRECT3DTEXTURE8 m_pWomanTexture;
	LPDIRECT3DCUBETEXTURE8 m_pNormalizingTexture;
	LPDIRECT3DTEXTURE8 m_pMinnaertTexture;
	LPDIRECT3DTEXTURE8 m_pVelvetBumpMapTexture;

	LPDIRECT3DVERTEXBUFFER8 m_pTexture2DVB;
	LPDIRECT3DVERTEXBUFFER8 m_pTestQuadVB;
	
	double m_MinnaertPower;
	
	D3DVIEWPORT8 m_D3DViewPort;

	//our matrices
	D3DXMATRIX m_MatWorld;
    D3DXMATRIX m_MatView;
	D3DXMATRIX m_MatProj;
	
	D3DXVECTOR3 m_vEyePt;
	D3DXVECTOR3 m_vLookatPt;
	D3DXVECTOR3 m_vUp;

	D3DXVECTOR3 m_LightDir;
	
	ROTATEENUM	m_Rotating;
	ROTATEENUM	m_LastRotating;
	bool		m_bAutoRotate;
	float		m_curYaw;
	float		m_curPitch;
	D3DXVECTOR3 m_VRotation;

	bool m_bWireframe;
	bool m_bUseTrilinear;
	bool m_bSilhouettes;
	bool m_bShading;
	bool m_bShadingSilhouettes;
	MouseUI* m_mUI;

	eBRDFDisplayOptions m_eDisplayOption;
	
	HRESULT LoadXFile(const char* fileName, const DWORD dwFVF, DWORD index);
	HRESULT SetVertexShaderMatrices(DWORD index);
	HRESULT SetTextureStageStates(DWORD, DWORD);
	HRESULT Create2DBitmap(DWORD x, DWORD y, DWORD width, DWORD height);
	HRESULT Draw2DBitmap();
	HRESULT CreateTestQuad();
	void SetupFixedCamera(float radius);
	void UpdateObject(DWORD index);
	void SetLightPosition();

	
};

#endif

⌨️ 快捷键说明

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