00001
00002
00003
00004
00005
00006
00007
00008 #ifndef D3DUTIL_H
00009 #define D3DUTIL_H
00010 #include <D3D8.h>
00011 #include <D3DX8Math.h>
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 VOID D3DUtil_InitMaterial( D3DMATERIAL8& mtrl, FLOAT r=0.0f, FLOAT g=0.0f,
00022 FLOAT b=0.0f, FLOAT a=1.0f );
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 VOID D3DUtil_InitLight( D3DLIGHT8& light, D3DLIGHTTYPE ltType,
00033 FLOAT x=0.0f, FLOAT y=0.0f, FLOAT z=0.0f );
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 HRESULT D3DUtil_CreateTexture( LPDIRECT3DDEVICE8 pd3dDevice, TCHAR* strTexture,
00044 LPDIRECT3DTEXTURE8* ppTexture,
00045 D3DFORMAT d3dFormat = D3DFMT_UNKNOWN );
00046
00047
00048
00049
00050
00051
00052
00053
00054 HRESULT D3DUtil_SetColorKey( LPDIRECT3DTEXTURE8 pTexture, DWORD dwColorKey );
00055
00056
00057
00058
00059
00060
00061
00062
00063 HRESULT D3DUtil_CreateVertexShader( LPDIRECT3DDEVICE8 pd3dDevice,
00064 TCHAR* strFilename, DWORD* pdwVertexDecl,
00065 DWORD* pdwVertexShader );
00066
00067
00068
00069
00070
00071
00072
00073
00074 D3DXMATRIX D3DUtil_GetCubeMapViewMatrix( DWORD dwFace );
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 D3DXQUATERNION D3DUtil_GetRotationFromCursor( HWND hWnd,
00085 FLOAT fTrackBallRadius=1.0f );
00086
00087
00088
00089
00090
00091
00092
00093
00094 HRESULT D3DUtil_SetDeviceCursor( LPDIRECT3DDEVICE8 pd3dDevice, HCURSOR hCursor,
00095 BOOL bAddWatermark );
00096
00097
00098
00099
00100
00101
00102
00103
00104 class CD3DArcBall
00105 {
00106 INT m_iWidth;
00107 INT m_iHeight;
00108 FLOAT m_fRadius;
00109 FLOAT m_fRadiusTranslation;
00110
00111 D3DXQUATERNION m_qDown;
00112 D3DXQUATERNION m_qNow;
00113 D3DXMATRIX m_matRotation;
00114 D3DXMATRIX m_matRotationDelta;
00115 D3DXMATRIX m_matTranslation;
00116 D3DXMATRIX m_matTranslationDelta;
00117 BOOL m_bDrag;
00118 BOOL m_bRightHanded;
00119
00120 D3DXVECTOR3 ScreenToVector( int sx, int sy );
00121
00122 public:
00123 LRESULT HandleMouseMessages( HWND, UINT, WPARAM, LPARAM );
00124
00125 D3DXMATRIX* GetRotationMatrix() { return &m_matRotation; }
00126 D3DXMATRIX* GetRotationDeltaMatrix() { return &m_matRotationDelta; }
00127 D3DXMATRIX* GetTranslationMatrix() { return &m_matTranslation; }
00128 D3DXMATRIX* GetTranslationDeltaMatrix() { return &m_matTranslationDelta; }
00129 BOOL IsBeingDragged() { return m_bDrag; }
00130
00131 VOID SetRadius( FLOAT fRadius );
00132 VOID SetWindow( INT w, INT h, FLOAT r=0.9 );
00133 VOID SetRightHanded( BOOL bRightHanded ) { m_bRightHanded = bRightHanded; }
00134
00135 CD3DArcBall();
00136 };
00137
00138
00139
00140
00141
00142
00143
00144
00145 class CD3DCamera
00146 {
00147 D3DXVECTOR3 m_vEyePt;
00148 D3DXVECTOR3 m_vLookatPt;
00149 D3DXVECTOR3 m_vUpVec;
00150
00151 D3DXVECTOR3 m_vView;
00152 D3DXVECTOR3 m_vCross;
00153
00154 D3DXMATRIX m_matView;
00155 D3DXMATRIX m_matBillboard;
00156
00157 FLOAT m_fFOV;
00158 FLOAT m_fAspect;
00159 FLOAT m_fNearPlane;
00160 FLOAT m_fFarPlane;
00161 D3DXMATRIX m_matProj;
00162
00163 public:
00164
00165 D3DXVECTOR3 GetEyePt() { return m_vEyePt; }
00166 D3DXVECTOR3 GetLookatPt() { return m_vLookatPt; }
00167 D3DXVECTOR3 GetUpVec() { return m_vUpVec; }
00168 D3DXVECTOR3 GetViewDir() { return m_vView; }
00169 D3DXVECTOR3 GetCross() { return m_vCross; }
00170
00171 D3DXMATRIX GetViewMatrix() { return m_matView; }
00172 D3DXMATRIX GetBillboardMatrix() { return m_matBillboard; }
00173 D3DXMATRIX GetProjMatrix() { return m_matProj; }
00174
00175 VOID SetViewParams( D3DXVECTOR3 &vEyePt, D3DXVECTOR3& vLookatPt,
00176 D3DXVECTOR3& vUpVec );
00177 VOID SetProjParams( FLOAT fFOV, FLOAT fAspect, FLOAT fNearPlane,
00178 FLOAT fFarPlane );
00179
00180 CD3DCamera();
00181 };
00182
00183
00184
00185
00186
00187
00188 #define D3DPSP_WRITEMASK_B D3DSP_WRITEMASK_0
00189 #define D3DPSP_WRITEMASK_G D3DSP_WRITEMASK_1
00190 #define D3DPSP_WRITEMASK_R D3DSP_WRITEMASK_2
00191 #define D3DPSP_WRITEMASK_A D3DSP_WRITEMASK_3
00192 #define D3DPSP_WRITEMASK_C (D3DPSP_WRITEMASK_B|D3DPSP_WRITEMASK_G|D3DPSP_WRITEMASK_R)
00193 #define D3DPSP_WRITEMASK_ALL (D3DSP_WRITEMASK_0|D3DSP_WRITEMASK_1|D3DSP_WRITEMASK_2|D3DSP_WRITEMASK_3)
00194 #define D3DPSP_WRITEMASK_10 (D3DSP_WRITEMASK_0|D3DSP_WRITEMASK_1)
00195 #define D3DPSP_WRITEMASK_32 (D3DSP_WRITEMASK_2|D3DSP_WRITEMASK_3)
00196
00197
00198 #define D3DPS_REGNUM_MASK(_Num) ( (1L<<31) | ((_Num)&D3DSP_REGNUM_MASK) )
00199 #define D3DPS_DST(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSPR_TEMP | D3DPSP_WRITEMASK_ALL )
00200 #define D3DPS_SRC_TEMP(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEMP )
00201 #define D3DPS_SRC_INPUT(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_INPUT )
00202 #define D3DPS_SRC_CONST(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_CONST )
00203 #define D3DPS_SRC_TEXTURE(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEXTURE )
00204 #define D3DVS_SRC_ADDR(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_ADDR )
00205 #define D3DVS_SRC_RASTOUT(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_RASTOUT )
00206 #define D3DVS_SRC_ATTROUT(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_ATTROUT )
00207 #define D3DVS_SRC_TEXCRDOUT(_Num) ( D3DPS_REGNUM_MASK(_Num) | D3DSP_NOSWIZZLE | D3DSPR_TEXCRDOUT )
00208
00209
00210 #define D3DS_DR0 D3DPS_DST(0)
00211 #define D3DS_DR1 D3DPS_DST(1)
00212 #define D3DS_DR2 D3DPS_DST(2)
00213 #define D3DS_DR3 D3DPS_DST(3)
00214 #define D3DS_DR4 D3DPS_DST(4)
00215 #define D3DS_DR5 D3DPS_DST(5)
00216 #define D3DS_DR6 D3DPS_DST(6)
00217 #define D3DS_DR7 D3DPS_DST(7)
00218
00219
00220 #define D3DS_SR0 D3DPS_SRC_TEMP(0)
00221 #define D3DS_SR1 D3DPS_SRC_TEMP(1)
00222 #define D3DS_SR2 D3DPS_SRC_TEMP(2)
00223 #define D3DS_SR3 D3DPS_SRC_TEMP(3)
00224 #define D3DS_SR4 D3DPS_SRC_TEMP(4)
00225 #define D3DS_SR5 D3DPS_SRC_TEMP(5)
00226 #define D3DS_SR6 D3DPS_SRC_TEMP(6)
00227 #define D3DS_SR7 D3DPS_SRC_TEMP(7)
00228
00229
00230 #define D3DS_T0 D3DPS_SRC_TEXTURE(0)
00231 #define D3DS_T1 D3DPS_SRC_TEXTURE(1)
00232 #define D3DS_T2 D3DPS_SRC_TEXTURE(2)
00233 #define D3DS_T3 D3DPS_SRC_TEXTURE(3)
00234 #define D3DS_T4 D3DPS_SRC_TEXTURE(4)
00235 #define D3DS_T5 D3DPS_SRC_TEXTURE(5)
00236 #define D3DS_T6 D3DPS_SRC_TEXTURE(6)
00237 #define D3DS_T7 D3DPS_SRC_TEXTURE(7)
00238
00239
00240 #define D3DS_C0 D3DPS_SRC_CONST(0)
00241 #define D3DS_C1 D3DPS_SRC_CONST(1)
00242 #define D3DS_C2 D3DPS_SRC_CONST(2)
00243 #define D3DS_C3 D3DPS_SRC_CONST(3)
00244 #define D3DS_C4 D3DPS_SRC_CONST(4)
00245 #define D3DS_C5 D3DPS_SRC_CONST(5)
00246 #define D3DS_C6 D3DPS_SRC_CONST(6)
00247 #define D3DS_C7 D3DPS_SRC_CONST(7)
00248
00249
00250 #define D3DS_V0 D3DPS_SRC_INPUT(0)
00251 #define D3DS_V1 D3DPS_SRC_INPUT(1)
00252
00253
00254
00255
00256 #endif // D3DUTIL_H