// WBWaterNormalTexGenerator.h: interface for the WBWaterNormalTexGenerator class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_WBWATERNORMALTEXGENERATOR_H__A9C62D45_472F_44BC_B49C_949E7DB8BE5D__INCLUDED_) #define AFX_WBWATERNORMALTEXGENERATOR_H__A9C62D45_472F_44BC_B49C_949E7DB8BE5D__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 /* **************************************************** * WBWaterNormalTexGenerator.h * ±â´É : Water Normalmap Generator Class ¹°Ç¥¸éÀÇ ÅØ½ºÃĸ¦ generation ÇÑ´Ù ( DOT3 EMPM MAP) * ³¯Â¥ : 10.23.2003 * History : wizardbug (10.23.2003) ***************************************************** */ #include #include "WBValue.h" /*#include "WBTexture.h"*/ #include "./WBWaterNormalTexGenShader.h" #include "Texture.h" #define RENDERTARGET_NUM 4 class WBWaterOffset { public: D3DXVECTOR4 m_vecOffset[4]; // Texture stage Coord (0 ~ 3 Stage) WBWaterOffset(){} ~WBWaterOffset(){} }; class WBWaterQuad { public: D3DXVECTOR3 vecPos; D3DXVECTOR2 vecTexcoord; WBWaterQuad() : vecPos(0.0f,0.0f,0.0f),vecTexcoord(0.0f,0.0f) {} ~WBWaterQuad(){} }; class WBWaterNormalTexGenVShader; class WBWaterNormalTexGenerator { protected: LPDIRECT3DDEVICE8 m_pDevice; int m_iTexSizeX; int m_iTexSizeY; float m_fTexelSizeX; float m_fTexelSizeY; float m_fDropletFreq; float m_fPosAtten; float m_fEqRestore_factor; float m_fVelFactor; float m_fForceFactor; int m_iChangeState; // Normal map Generator°¡ Normal Map À» ¾ó¸¶³ª º¯°æ½ÃÄ״°¡. int m_iFlipState; // Texture Change Value. ( 0 or 1) float m_fNormalSTScale; // Normal map S,T vector Scale factor float m_fScrollU; // Normal map X Scroll factor float m_fScrollV; // Normal map Y Scroll factor float m_fDropletMinSize; // ÆÄÀåÀÇ min size float m_fDropletMaxSize; // ÆÄÀåÀÇ max size (ÆÄÀåÀº ¿ìÀÇ µÎ °ª »çÀÌ¿¡¼­ Á¶Àý) float m_fWindX; // ¹Ù¶÷ÀÇ ¼¼±â float m_fWindY; float m_fBlurDist; LPDIRECT3DSURFACE8 m_pBackColorSurf; LPDIRECT3DSURFACE8 m_pBackDepthSurf; char m_strDisplaceMap[256]; CTexture *m_pDisplaceMap; LPDIRECT3DTEXTURE8 m_pRenderTargetTex[RENDERTARGET_NUM]; LPDIRECT3DSURFACE8 m_pRenderTargetSurf[RENDERTARGET_NUM]; LPDIRECT3DVERTEXBUFFER8 m_pQuadBuffer; D3DXMATRIX m_matWorldViewProject; // Shader ¿ë World - view - project matrix int m_iFocusTexSrc; LPDIRECT3DTEXTURE8 m_pFocusTexSrc; int m_iFocusTexDst; int m_iFocusDisTexDst; // Displacement Texture index int m_iStepTex; WBWaterNormalTexGenShader *m_pShader; // WBWaterNormalTexGenVShader *m_pVShader; // DWORD m_dwTexOffsetVShader; std::vector m_DropWaters; public: WBWaterOffset m_TextureCoord[5]; void Init(LPDIRECT3DDEVICE8 pDevice,int iSizeX,int iSizeY,char *strDisplaceMap); void Release(); void Update(); // Normal map Render void LoadDisplaceMap(); void CreateRenderTexture(int iSizeX,int iSizeY); void CreateVertex(); void CreateMatrix(); void CreateUvOffset(int iSizeX,int iSizeY); void CreateUvBlur(); LPDIRECT3DTEXTURE8 GetNormalTexure() { if(m_pDisplaceMap) return (LPDIRECT3DTEXTURE8)(m_pDisplaceMap->GetTexture()); return NULL;}; LPDIRECT3DTEXTURE8 GetNormalTexure1() { return m_pRenderTargetTex[m_iFocusDisTexDst];}; void BackRenderTarget(); void SetWaterValue(); void SetNormalGenRenderState(); void ProcessNormalMap(); // Normal map Processing(Update) void SetZeroOffset(int iOff); void AddDropWater( float fX, float fY, float fScale ); void DrawDropWaters(); // DisplaceMap Create (Dot3X2) void CreateDot3x2EMBMMapSteps(); void SetWindX(float fX); void SetWindY(float fY); WBWaterNormalTexGenerator(); ~WBWaterNormalTexGenerator(); }; #endif // !defined(AFX_WBWATERNORMALTEXGENERATOR_H__A9C62D45_472F_44BC_B49C_949E7DB8BE5D__INCLUDED_)