D3DUTILS.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #ifndef D3DUTILS_H
  2. #define D3DUTILS_H
  3. /*
  4. **-----------------------------------------------------------------------------
  5. ** Name:    D3DUtils.h
  6. ** Purpose: Various D3D utility functions
  7. ** Notes:
  8. **
  9. ** Copyright (c) 1995 - 1997 by Microsoft, all rights reserved
  10. **-----------------------------------------------------------------------------
  11. */
  12. #define D3D_OVERLOADS
  13. #include <d3d.h>
  14. #include <d3dtypes.h>
  15. extern const float pi;
  16. /*
  17. **-----------------------------------------------------------------------------
  18. ** Function Prototypes
  19. **-----------------------------------------------------------------------------
  20. */
  21. // generic simple matrix routines
  22. extern D3DMATRIX ZeroMatrix(void);
  23. extern D3DMATRIX IdentityMatrix(void);
  24. extern D3DMATRIX ProjectionMatrix(const float near_plane, const float far_plane, const float fov);
  25. extern D3DMATRIX ViewMatrix(const D3DVECTOR & from, const D3DVECTOR & at, 
  26. const D3DVECTOR & up, const float roll=0.0f);
  27. extern D3DMATRIX RotateXMatrix(const float rads);
  28. extern D3DMATRIX RotateYMatrix(const float rads);
  29. extern D3DMATRIX RotateZMatrix(const float rads);
  30. extern D3DMATRIX TranslateMatrix(const float dx, const float dy, const float dz);
  31. extern D3DMATRIX TranslateMatrix(const D3DVECTOR & v);
  32. extern D3DMATRIX ScaleMatrix(const float size);
  33. extern D3DMATRIX ScaleMatrix(const float a, const float b, const float c);
  34. extern D3DMATRIX ScaleMatrix(const D3DVECTOR & v);
  35. extern D3DMATRIX MatrixMult(const D3DMATRIX & a, const D3DMATRIX & b);
  36. extern D3DMATRIX MatrixInverse(const D3DMATRIX & m);
  37. extern D3DMATRIX MatrixTranspose(const D3DMATRIX & m);
  38. extern D3DVECTOR TransformVector(const D3DVECTOR & v, const D3DMATRIX & m);
  39. extern D3DVECTOR TransformNormal(const D3DVECTOR & v, const D3DMATRIX & m);
  40. // Other stuff
  41. extern float rnd(void);
  42. /*
  43. **-----------------------------------------------------------------------------
  44. ** Classes
  45. **-----------------------------------------------------------------------------
  46. */
  47. /*
  48. **-----------------------------------------------------------------------------
  49. ** Class: Light
  50. ** Purpose:
  51. **-----------------------------------------------------------------------------
  52. */
  53. class Light {
  54. protected:
  55. public:
  56. D3DLIGHT2 light; // structure defining the light
  57. LPDIRECT3DLIGHT lpD3DLight; // object pointer for the light
  58. int changed;
  59. public:
  60. Light(LPDIRECT3D2 lpD3D);
  61. ~Light();
  62. HRESULT AddToViewport(LPDIRECT3DVIEWPORT2 lpView);
  63. HRESULT RemoveFromViewport(LPDIRECT3DVIEWPORT2 lpView);
  64. HRESULT Set(void);
  65. void SetColor(const D3DVECTOR& color);
  66. D3DVECTOR GetColor(void) const;
  67. void SetPosition(const D3DVECTOR& position);
  68. D3DVECTOR GetPosition(void) const;
  69. void SetDirection(const D3DVECTOR& direction);
  70. D3DVECTOR GetDirection(void) const;
  71. void SetAttenuation(const D3DVECTOR& attenuation);
  72. D3DVECTOR GetAttenuation(void) const;
  73. void SetRange(const float range);
  74. float GetRange(void) const;
  75. void SetFalloff(const float falloff);
  76. float GetFalloff(void) const;
  77. void SetUmbra(const float falloff);
  78. float GetUmbra(void) const;
  79. void SetPenumbra(const float falloff);
  80. float GetPenumbra(void) const;
  81. void SetFlags(const DWORD flags);
  82. DWORD GetFlags(void) const;
  83. }; // End Light
  84. /*
  85. **-----------------------------------------------------------------------------
  86. ** Class: PointLight
  87. ** Purpose:
  88. **-----------------------------------------------------------------------------
  89. */
  90. class PointLight : public Light {
  91. public:
  92. PointLight(LPDIRECT3D2 lpD3D, 
  93. const D3DVECTOR & color, 
  94. const D3DVECTOR & position);
  95. }; // End PointLight
  96. /*
  97. **-----------------------------------------------------------------------------
  98. ** Class: SpotLight
  99. ** Purpose:
  100. **-----------------------------------------------------------------------------
  101. */
  102. class SpotLight : public Light {
  103. public:
  104. SpotLight(LPDIRECT3D2 lpD3D, 
  105. const D3DVECTOR& color, 
  106. const D3DVECTOR& position, 
  107. const D3DVECTOR& direction, 
  108. const float umbra_angle, 
  109. const float penumbra_angle);
  110. }; // End SpotLight
  111. /*
  112. **-----------------------------------------------------------------------------
  113. ** Class: DirectionalLight
  114. ** Purpose:
  115. **-----------------------------------------------------------------------------
  116. */
  117. class DirectionalLight : public Light {
  118. public:
  119. DirectionalLight(LPDIRECT3D2 lpD3D, 
  120. const D3DVECTOR& color, const D3DVECTOR& direction);
  121. };
  122. /*
  123. **-----------------------------------------------------------------------------
  124. ** Class: ParallelPointLight
  125. ** Purpose:
  126. **-----------------------------------------------------------------------------
  127. */
  128. class ParallelPointLight : public Light {
  129. public:
  130. ParallelPointLight(LPDIRECT3D2 lpD3D, const D3DVECTOR& color, const D3DVECTOR& position);
  131. }; // End ParallelPointLight
  132. /*
  133. **-----------------------------------------------------------------------------
  134. ** Class: Material
  135. ** Purpose:
  136. **-----------------------------------------------------------------------------
  137. */
  138. class Material 
  139. {
  140. protected:
  141. D3DMATERIAL Mat;
  142.     D3DMATERIALHANDLE hMat;
  143. LPDIRECT3DMATERIAL2 lpMat;
  144. int changed;
  145. public:
  146. Material(LPDIRECT3D2 lpD3D, LPDIRECT3DDEVICE2 lpDev);
  147. ~Material();
  148. HRESULT SetAsCurrent(LPDIRECT3DDEVICE2 lpDev);
  149. HRESULT SetAsBackground(LPDIRECT3DVIEWPORT2 lpView);
  150. HRESULT Set(void);
  151. void SetDiffuse(const D3DVECTOR& color);
  152. D3DVECTOR GetDiffuse(void) const;
  153. void SetAlpha(const float& alpha);
  154. float GetAlpha(void) const;
  155. void SetAmbient(const D3DVECTOR& color);
  156. D3DVECTOR GetAmbient(void) const;
  157. void SetEmissive(const D3DVECTOR& color);
  158. D3DVECTOR GetEmissive(void) const;
  159. void SetSpecular(const D3DVECTOR& color);
  160. D3DVECTOR GetSpecular(void) const;
  161. void SetPower(const D3DVALUE& power);
  162. D3DVALUE GetPower(void) const;
  163. void SetRampSize(const DWORD& ramp);
  164. DWORD GetRampSize(void) const;
  165. void SetTextureHandle(const D3DTEXTUREHANDLE& hTexture);
  166. D3DTEXTUREHANDLE GetTextureHandle(void);
  167. }; // End Material
  168. //
  169. // include the inline functions for the classes
  170. //
  171. #include "d3dutils.inl"
  172. /*
  173. **-----------------------------------------------------------------------------
  174. ** End of File
  175. **-----------------------------------------------------------------------------
  176. */
  177. #endif // D3DUTILS_H