www.pudn.com > d3d_grass.rar > d3dutil.h


//----------------------------------------------------------------------------- 
// File: D3DUtil.h 
// 
// Desc: Helper functions and typing shortcuts for Direct3D programming. 
// 
// Copyright (c) 1997-2001 Microsoft Corporation. All rights reserved 
//----------------------------------------------------------------------------- 
#ifndef D3DUTIL_H 
#define D3DUTIL_H 
#include  
#include  
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_InitMaterial() 
// Desc: Initializes a D3DMATERIAL8 structure, setting the diffuse and ambient 
//       colors. It does not set emissive or specular colors. 
//----------------------------------------------------------------------------- 
VOID D3DUtil_InitMaterial( D3DMATERIAL8& mtrl, FLOAT r=0.0f, FLOAT g=0.0f, 
                                               FLOAT b=0.0f, FLOAT a=1.0f ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_InitLight() 
// Desc: Initializes a D3DLIGHT structure, setting the light position. The 
//       diffuse color is set to white, specular and ambient left as black. 
//----------------------------------------------------------------------------- 
VOID D3DUtil_InitLight( D3DLIGHT8& light, D3DLIGHTTYPE ltType, 
                        FLOAT x=0.0f, FLOAT y=0.0f, FLOAT z=0.0f ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_CreateTexture() 
// Desc: Helper function to create a texture. It checks the root path first, 
//       then tries the DXSDK media path (as specified in the system registry). 
//----------------------------------------------------------------------------- 
HRESULT D3DUtil_CreateTexture( LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* strTexture, 
                               LPDIRECT3DTEXTURE8* ppTexture, 
                               D3DFORMAT d3dFormat = D3DFMT_UNKNOWN ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_SetColorKey() 
// Desc: Changes all texels matching the colorkey to transparent, black. 
//----------------------------------------------------------------------------- 
HRESULT D3DUtil_SetColorKey( LPDIRECT3DTEXTURE8 pTexture, DWORD dwColorKey ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_CreateVertexShader() 
// Desc: Assembles and creates a file-based vertex shader 
//----------------------------------------------------------------------------- 
HRESULT D3DUtil_CreateVertexShader( LPDIRECT3DDEVICE8 pd3dDevice,  
                                    TCHAR* strFilename, DWORD* pdwVertexDecl, 
                                    DWORD* pdwVertexShader ); 
 
                                     
                                     
                                     
//----------------------------------------------------------------------------- 
// Name: D3DUtil_GetCubeMapViewMatrix() 
// Desc: Returns a view matrix for rendering to a face of a cubemap. 
//----------------------------------------------------------------------------- 
D3DXMATRIX D3DUtil_GetCubeMapViewMatrix( DWORD dwFace ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_GetRotationFromCursor() 
// Desc: Returns a quaternion for the rotation implied by the window's cursor 
//       position. 
//----------------------------------------------------------------------------- 
D3DXQUATERNION D3DUtil_GetRotationFromCursor( HWND hWnd, 
                                              FLOAT fTrackBallRadius=1.0f ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: D3DUtil_SetDeviceCursor 
// Desc: Builds and sets a cursor for the D3D device based on hCursor. 
//----------------------------------------------------------------------------- 
HRESULT D3DUtil_SetDeviceCursor( LPDIRECT3DDEVICE8 pd3dDevice, HCURSOR hCursor, 
                                 BOOL bAddWatermark ); 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CD3DArcBall 
// Desc: 
//----------------------------------------------------------------------------- 
class CD3DArcBall 
{ 
    INT            m_iWidth;   // ArcBall's window width 
    INT            m_iHeight;  // ArcBall's window height 
    FLOAT          m_fRadius;  // ArcBall's radius in screen coords 
    FLOAT          m_fRadiusTranslation; // ArcBall's radius for translating the target 
 
    D3DXQUATERNION m_qDown;               // Quaternion before button down 
    D3DXQUATERNION m_qNow;                // Composite quaternion for current drag 
    D3DXMATRIX     m_matRotation;         // Matrix for arcball's orientation 
    D3DXMATRIX     m_matRotationDelta;    // Matrix for arcball's orientation 
    D3DXMATRIX     m_matTranslation;      // Matrix for arcball's position 
    D3DXMATRIX     m_matTranslationDelta; // Matrix for arcball's position 
    BOOL           m_bDrag;               // Whether user is dragging arcball 
    BOOL           m_bRightHanded;        // Whether to use RH coordinate system 
 
    D3DXVECTOR3 ScreenToVector( int sx, int sy ); 
 
public: 
    LRESULT     HandleMouseMessages( HWND, UINT, WPARAM, LPARAM ); 
 
    D3DXMATRIX* GetRotationMatrix()         { return &m_matRotation; } 
    D3DXMATRIX* GetRotationDeltaMatrix()    { return &m_matRotationDelta; } 
    D3DXMATRIX* GetTranslationMatrix()      { return &m_matTranslation; } 
    D3DXMATRIX* GetTranslationDeltaMatrix() { return &m_matTranslationDelta; } 
    BOOL        IsBeingDragged()            { return m_bDrag; } 
 
    VOID        SetRadius( FLOAT fRadius ); 
    VOID        SetWindow( INT w, INT h, FLOAT r=0.9 ); 
    VOID        SetRightHanded( BOOL bRightHanded ) { m_bRightHanded = bRightHanded; } 
 
    CD3DArcBall(); 
}; 
 
 
 
 
//----------------------------------------------------------------------------- 
// Name: class CD3DCamera 
// Desc: 
//----------------------------------------------------------------------------- 
class CD3DCamera 
{ 
    D3DXVECTOR3 m_vEyePt;       // Attributes for view matrix 
    D3DXVECTOR3 m_vLookatPt; 
    D3DXVECTOR3 m_vUpVec; 
 
    D3DXVECTOR3 m_vView; 
    D3DXVECTOR3 m_vCross; 
 
    D3DXMATRIX  m_matView; 
    D3DXMATRIX  m_matBillboard; // Special matrix for billboarding effects 
 
    FLOAT       m_fFOV;         // Attributes for projection matrix 
    FLOAT       m_fAspect; 
    FLOAT       m_fNearPlane; 
    FLOAT       m_fFarPlane; 
    D3DXMATRIX  m_matProj; 
 
public: 
    // Access functions 
    D3DXVECTOR3 GetEyePt()           { return m_vEyePt; } 
    D3DXVECTOR3 GetLookatPt()        { return m_vLookatPt; } 
    D3DXVECTOR3 GetUpVec()           { return m_vUpVec; } 
    D3DXVECTOR3 GetViewDir()         { return m_vView; } 
    D3DXVECTOR3 GetCross()           { return m_vCross; } 
 
    D3DXMATRIX  GetViewMatrix()      { return m_matView; } 
    D3DXMATRIX  GetBillboardMatrix() { return m_matBillboard; } 
    D3DXMATRIX  GetProjMatrix()      { return m_matProj; } 
 
    VOID SetViewParams( D3DXVECTOR3 &vEyePt, D3DXVECTOR3& vLookatPt, 
                        D3DXVECTOR3& vUpVec ); 
    VOID SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane, 
                        FLOAT fFarPlane ); 
 
    CD3DCamera(); 
}; 
 
//----------------------------------------------------------------------------- 
// Helper macros for pixel shader instructions 
//----------------------------------------------------------------------------- 
 
// Parameter writemasks 
#define D3DPSP_WRITEMASK_B   D3DSP_WRITEMASK_0 
#define D3DPSP_WRITEMASK_G   D3DSP_WRITEMASK_1 
#define D3DPSP_WRITEMASK_R   D3DSP_WRITEMASK_2 
#define D3DPSP_WRITEMASK_A   D3DSP_WRITEMASK_3 
#define D3DPSP_WRITEMASK_C   (D3DPSP_WRITEMASK_B|D3DPSP_WRITEMASK_G|D3DPSP_WRITEMASK_R) 
#define D3DPSP_WRITEMASK_ALL (D3DSP_WRITEMASK_0|D3DSP_WRITEMASK_1|D3DSP_WRITEMASK_2|D3DSP_WRITEMASK_3) 
#define D3DPSP_WRITEMASK_10  (D3DSP_WRITEMASK_0|D3DSP_WRITEMASK_1) 
#define D3DPSP_WRITEMASK_32  (D3DSP_WRITEMASK_2|D3DSP_WRITEMASK_3) 
 
// Source and destination parameter token 
#define D3DPS_REGNUM_MASK(_Num)   ( (1L<<31) | ((_Num)&D3DSP_REGNUM_MASK) ) 
#define D3DPS_DST(_Num)           ( D3DPS_REGNUM_MASK(_Num) | D3DSPR_TEMP | D3DPSP_WRITEMASK_ALL ) 
#define D3DPS_SRC_TEMP(_Num)      ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEMP ) 
#define D3DPS_SRC_INPUT(_Num)     ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_INPUT ) 
#define D3DPS_SRC_CONST(_Num)     ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_CONST ) 
#define D3DPS_SRC_TEXTURE(_Num)   ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEXTURE ) 
#define D3DVS_SRC_ADDR(_Num)      ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_ADDR ) 
#define D3DVS_SRC_RASTOUT(_Num)   ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_RASTOUT ) 
#define D3DVS_SRC_ATTROUT(_Num)   ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_ATTROUT ) 
#define D3DVS_SRC_TEXCRDOUT(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEXCRDOUT ) 
 
// Temp destination registers 
#define D3DS_DR0   D3DPS_DST(0) 
#define D3DS_DR1   D3DPS_DST(1) 
#define D3DS_DR2   D3DPS_DST(2) 
#define D3DS_DR3   D3DPS_DST(3) 
#define D3DS_DR4   D3DPS_DST(4) 
#define D3DS_DR5   D3DPS_DST(5) 
#define D3DS_DR6   D3DPS_DST(6) 
#define D3DS_DR7   D3DPS_DST(7) 
 
// Temp source registers 
#define D3DS_SR0   D3DPS_SRC_TEMP(0) 
#define D3DS_SR1   D3DPS_SRC_TEMP(1) 
#define D3DS_SR2   D3DPS_SRC_TEMP(2) 
#define D3DS_SR3   D3DPS_SRC_TEMP(3) 
#define D3DS_SR4   D3DPS_SRC_TEMP(4) 
#define D3DS_SR5   D3DPS_SRC_TEMP(5) 
#define D3DS_SR6   D3DPS_SRC_TEMP(6) 
#define D3DS_SR7   D3DPS_SRC_TEMP(7) 
 
// Texture parameters 
#define D3DS_T0   D3DPS_SRC_TEXTURE(0) 
#define D3DS_T1   D3DPS_SRC_TEXTURE(1) 
#define D3DS_T2   D3DPS_SRC_TEXTURE(2) 
#define D3DS_T3   D3DPS_SRC_TEXTURE(3) 
#define D3DS_T4   D3DPS_SRC_TEXTURE(4) 
#define D3DS_T5   D3DPS_SRC_TEXTURE(5) 
#define D3DS_T6   D3DPS_SRC_TEXTURE(6) 
#define D3DS_T7   D3DPS_SRC_TEXTURE(7) 
 
// Constant (factor) source parameters 
#define D3DS_C0     D3DPS_SRC_CONST(0) 
#define D3DS_C1     D3DPS_SRC_CONST(1) 
#define D3DS_C2     D3DPS_SRC_CONST(2) 
#define D3DS_C3     D3DPS_SRC_CONST(3) 
#define D3DS_C4     D3DPS_SRC_CONST(4) 
#define D3DS_C5     D3DPS_SRC_CONST(5) 
#define D3DS_C6     D3DPS_SRC_CONST(6) 
#define D3DS_C7     D3DPS_SRC_CONST(7) 
 
// Iterated source parameters (0==Diffuse, 1==specular) 
#define D3DS_V0     D3DPS_SRC_INPUT(0) 
#define D3DS_V1     D3DPS_SRC_INPUT(1) 
 
 
 
 
#endif // D3DUTIL_H