stdmat.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. /*******************************************************************
  2. *
  3. * DESCRIPTION: Standard materials, textures, and fog: generic interface
  4. *
  5. * AUTHOR: Dan Silva
  6. *
  7. * HISTORY: Created 3/5/96
  8. *
  9. *******************************************************************/
  10. #ifndef __STDMAT__H
  11. #define __STDMAT_H
  12. // Shade values
  13. #define NSHADES 3
  14. #define SHADE_CONST 0
  15. #define SHADE_PHONG 1
  16. #define SHADE_METAL 2
  17. // Transparency types
  18. #define TRANSP_SUBTRACTIVE 0
  19. #define TRANSP_ADDITIVE 1
  20. #define TRANSP_FILTER 2
  21. #define NTEXMAPS 11
  22. // Texture map indices
  23. #define ID_AM 0 // ambient
  24. #define ID_DI 1 // diffuse
  25. #define ID_SP 2 // specular
  26. #define ID_SH 3 // shininesNs
  27. #define ID_SS 4 // shininess strength
  28. #define ID_SI 5 // self-illumination
  29. #define ID_OP 6 // opacity
  30. #define ID_FI 7 // filter color
  31. #define ID_BU 8 // bump
  32. #define ID_RL 9 // reflection
  33. #define ID_RR 10 // refraction
  34. class StdMat: public Mtl {
  35. public:
  36. virtual void SetShading(int s)=0;
  37. virtual void SetSoften(BOOL onoff)=0;
  38. virtual void SetFaceMap(BOOL onoff)=0;
  39. virtual void SetTwoSided(BOOL onoff)=0;
  40. virtual void SetWire(BOOL onoff)=0;
  41. virtual void SetWireUnits(BOOL onOff)=0;
  42. virtual void SetFalloffOut(BOOL onOff)=0; // 1: out, 0: in
  43. virtual void SetTransparencyType(int type)=0;
  44. virtual void SetAmbient(Color c, TimeValue t)=0;
  45. virtual void SetDiffuse(Color c, TimeValue t)=0;
  46. virtual void SetSpecular(Color c, TimeValue t)=0;
  47. virtual void SetFilter(Color c, TimeValue t)=0;
  48. virtual void SetShininess(float v, TimeValue t)=0;
  49. virtual void SetShinStr(float v, TimeValue t)=0;
  50. virtual void SetSelfIllum(float v, TimeValue t)=0;
  51. virtual void SetOpacity(float v, TimeValue t)=0;
  52. virtual void SetOpacFalloff(float v, TimeValue t)=0;
  53. virtual void SetWireSize(float s, TimeValue t)=0;
  54. virtual void SetIOR(float v, TimeValue t)=0;
  55. virtual void LockAmbDiffTex(BOOL onOff)=0;
  56. virtual void EnableMap(int i, BOOL onoff)=0;
  57. virtual void SetTexmapAmt(int imap, float amt, TimeValue t)=0;
  58. virtual int GetShading()=0;
  59. virtual BOOL GetSoften()=0;
  60. virtual BOOL GetFaceMap()=0;
  61. virtual BOOL GetTwoSided()=0;
  62. virtual BOOL GetWire()=0;
  63. virtual BOOL GetWireUnits()=0;
  64. virtual BOOL GetFalloffOut()=0; // 1: out, 0: in
  65. virtual int GetTransparencyType()=0;
  66. virtual Color GetAmbient(TimeValue t)=0;
  67. virtual Color GetDiffuse(TimeValue t)=0;
  68. virtual Color GetSpecular(TimeValue t)=0;
  69. virtual Color GetFilter(TimeValue t)=0;
  70. virtual float GetShininess( TimeValue t)=0;
  71. virtual float GetShinStr(TimeValue t)=0;
  72. virtual float GetSelfIllum(TimeValue t)=0;
  73. virtual float GetOpacity( TimeValue t)=0;
  74. virtual float GetOpacFalloff(TimeValue t)=0;
  75. virtual float GetWireSize(TimeValue t)=0;
  76. virtual float GetIOR( TimeValue t)=0;
  77. virtual BOOL GetAmbDiffTexLock()=0;
  78. virtual BOOL MapEnabled(int i)=0;
  79. virtual float GetTexmapAmt(int imap, TimeValue t)=0;
  80. };
  81. // Mapping types for SetCoordMapping
  82. #define UVMAP_EXPLICIT 0
  83. #define UVMAP_SPHERE_ENV 1
  84. #define UVMAP_CYL_ENV 2
  85. #define UVMAP_SHRINK_ENV 3
  86. #define UVMAP_SCREEN_ENV 4
  87. class StdUVGen: public UVGen {
  88. public:
  89. virtual void SetCoordMapping(int)=0;
  90. virtual void SetUOffs(float f, TimeValue t)=0;
  91. virtual void SetVOffs(float f, TimeValue t)=0;
  92. virtual void SetUScl(float f, TimeValue t)=0;
  93. virtual void SetVScl(float f, TimeValue t)=0;
  94. virtual void SetAng(float f, TimeValue t)=0; // angle in radians
  95. virtual void SetBlur(float f, TimeValue t)=0;
  96. virtual void SetBlurOffs(float f, TimeValue t)=0;
  97. virtual void SetNoiseAmt(float f, TimeValue t)=0;
  98. virtual void SetNoiseSize(float f, TimeValue t)=0;
  99. virtual void SetNoiseLev(int i, TimeValue t)=0;
  100. virtual void SetNoisePhs(float f, TimeValue t)=0;
  101. virtual void SetTextureTiling(int tiling)=0;
  102. virtual int GetCoordMapping(int)=0;
  103. virtual float GetUOffs( TimeValue t)=0;
  104. virtual float GetVOffs( TimeValue t)=0;
  105. virtual float GetUScl( TimeValue t)=0;
  106. virtual float GetVScl( TimeValue t)=0;
  107. virtual float GetAng( TimeValue t)=0; // angle in radians
  108. virtual float GetBlur( TimeValue t)=0;
  109. virtual float GetBlurOffs( TimeValue t)=0;
  110. virtual float GetNoiseAmt( TimeValue t)=0;
  111. virtual float GetNoiseSize( TimeValue t)=0;
  112. virtual int GetNoiseLev( TimeValue t)=0;
  113. virtual float GetNoisePhs( TimeValue t)=0;
  114. virtual int GetTextureTiling()=0;
  115. };
  116. // Image filtering types
  117. #define FILTER_PYR 0
  118. #define FILTER_SAT 1
  119. #define FILTER_NADA 2
  120. // Alpha source types
  121. #define ALPHA_FILE 0
  122. #define ALPHA_RGB 2
  123. #define ALPHA_NONE 3
  124. // End conditions:
  125. #define END_LOOP 0
  126. #define END_PINGPONG 1
  127. #define END_HOLD 2
  128. class BitmapTex: public Texmap {
  129. public:
  130. virtual void SetFilterType(int ft)=0;
  131. virtual void SetAlphaSource(int as)=0;
  132. virtual void SetEndCondition(int endcond)=0;
  133. virtual void SetAlphaAsMono(BOOL onoff)=0;
  134. virtual void SetMapName(TCHAR *name)=0;
  135. virtual void SetStartTime(TimeValue t)=0;
  136. virtual void SetPlaybackRate(float r)=0;
  137. virtual int GetFilterType()=0;
  138. virtual int GetAlphaSource()=0;
  139. virtual int GetEndCondition()=0;
  140. virtual BOOL GetAlphaAsMono(BOOL onoff)=0;
  141. virtual TCHAR *GetMapName()=0;
  142. virtual TimeValue GetStartTime()=0;
  143. virtual float GetPlaybackRate()=0;
  144. virtual StdUVGen* GetUVGen()=0;
  145. virtual TextureOutput* GetTexout()=0;
  146. };
  147. class MultiMtl: public Mtl {
  148. public:
  149. virtual void SetNumSubMtls(int n)=0;
  150. };
  151. class Tex3D: public Texmap {
  152. public:
  153. virtual void ReadSXPData(TCHAR *name, void *sxpdata)=0;
  154. };
  155. class MultiTex: public Texmap {
  156. public:
  157. virtual void SetNumSubTexmaps(int n) {}
  158. virtual void SetColor(int i, Color c, TimeValue t=0){}
  159. };
  160. class GradTex: public MultiTex {
  161. public:
  162. virtual StdUVGen* GetUVGen()=0;
  163. virtual TextureOutput* GetTexout()=0;
  164. virtual void SetMidPoint(float m, TimeValue t=0) {}
  165. };
  166. //===============================================================================
  167. // StdCubic
  168. //===============================================================================
  169. class StdCubic: public Texmap {
  170. public:
  171. virtual void SetSize(int n, TimeValue t)=0;
  172. virtual void SetDoNth(BOOL onoff)=0;
  173. virtual void SetNth(int n)=0;
  174. virtual void SetApplyBlur(BOOL onoff)=0;
  175. virtual void SetBlur(float b, TimeValue t)=0;
  176. virtual void SetBlurOffset(float b, TimeValue t)=0;
  177. virtual int GetSize(TimeValue t)=0;
  178. virtual BOOL GetDoNth()=0;
  179. virtual int GetNth()=0;
  180. virtual BOOL GetApplyBlur()=0;
  181. virtual float GetBlur(TimeValue t)=0;
  182. virtual float GetBlurOffset(TimeValue t)=0;
  183. };
  184. //===============================================================================
  185. // StdMirror
  186. //===============================================================================
  187. class StdMirror: public Texmap {
  188. public:
  189. virtual void SetDoNth(BOOL onoff)=0;
  190. virtual void SetNth(int n)=0;
  191. virtual void SetApplyBlur(BOOL onoff)=0;
  192. virtual void SetBlur(float b, TimeValue t)=0;
  193. virtual BOOL GetDoNth()=0;
  194. virtual int GetNth()=0;
  195. virtual BOOL GetApplyBlur()=0;
  196. virtual float GetBlur(TimeValue t)=0;
  197. };
  198. //===============================================================================
  199. // StdFog
  200. //===============================================================================
  201. // Fallof Types
  202. #define FALLOFF_TOP 0
  203. #define FALLOFF_BOTTOM 1
  204. #define FALLOFF_NONE 2
  205. class StdFog : public Atmospheric {
  206. public:
  207. virtual void SetColor(Color c, TimeValue t)=0;
  208. virtual void SetUseMap(BOOL onoff)=0;
  209. virtual void SetUseOpac(BOOL onoff)=0;
  210. virtual void SetColorMap(Texmap *tex)=0;
  211. virtual void SetOpacMap(Texmap *tex)=0;
  212. virtual void SetFogBackground(BOOL onoff)=0;
  213. virtual void SetType(int type)=0; // 0:Regular, 1:Layered
  214. virtual void SetNear(float v, TimeValue t)=0;
  215. virtual void SetFar(float v, TimeValue t)=0;
  216. virtual void SetTop(float v, TimeValue t)=0;
  217. virtual void SetBottom(float v, TimeValue t)=0;
  218. virtual void SetDensity(float v, TimeValue t)=0;
  219. virtual void SetFalloffType(int tv)=0;
  220. virtual void SetUseNoise(BOOL onoff)=0;
  221. virtual void SetNoiseScale(float v, TimeValue t)=0;
  222. virtual void SetNoiseAngle(float v, TimeValue t)=0;
  223. virtual void SetNoisePhase(float v, TimeValue t)=0;
  224. virtual Color GetColor(TimeValue t)=0;
  225. virtual BOOL GetUseMap()=0;
  226. virtual BOOL GetUseOpac()=0;
  227. virtual Texmap *GetColorMap()=0;
  228. virtual Texmap *GetOpacMap()=0;
  229. virtual BOOL GetFogBackground()=0;
  230. virtual int GetType()=0; // 0:Regular, 1:Layered
  231. virtual float GetNear(TimeValue t)=0;
  232. virtual float GetFar(TimeValue t)=0;
  233. virtual float GetTop(TimeValue t)=0;
  234. virtual float GetBottom(TimeValue t)=0;
  235. virtual float GetDensity(TimeValue t)=0;
  236. virtual int GetFalloffType()=0;
  237. virtual BOOL GetUseNoise()=0;
  238. virtual float GetNoiseScale( TimeValue t)=0;
  239. virtual float GetNoiseAngle( TimeValue t)=0;
  240. virtual float GetNoisePhase( TimeValue t)=0;
  241. };
  242. // Subclasses of Tex3D call this on loading to register themselves
  243. // as being able to read sxpdata for sxpName. (name includes ".SXP")
  244. CoreExport void RegisterSXPReader(TCHAR *sxpName, Class_ID cid);
  245. // When importing, this is called to get a "reader" for the sxp being loaded.
  246. CoreExport Tex3D *GetSXPReaderClass(TCHAR *sxpName);
  247. //==========================================================================
  248. // Create new instances of the standard materials, textures, and atmosphere
  249. //==========================================================================
  250. CoreExport StdMat *NewDefaultStdMat();
  251. CoreExport BitmapTex *NewDefaultBitmapTex();
  252. CoreExport MultiMtl *NewDefaultMultiMtl();
  253. CoreExport MultiTex *NewDefaultCompositeTex();
  254. CoreExport MultiTex *NewDefaultMixTex();
  255. CoreExport MultiTex *NewDefaultTintTex();
  256. CoreExport GradTex *NewDefaultGradTex();
  257. CoreExport StdCubic *NewDefaultStdCubic();
  258. CoreExport StdMirror *NewDefaultStdMirror();
  259. CoreExport StdFog *NewDefaultStdFog();
  260. #endif