lwtxtr.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /*
  2. * LWSDK Header File
  3. * Copyright 1999, NewTek, Inc.
  4. *
  5. * LWTXTR.H -- LightWave Textures
  6. */
  7. #ifndef LWSDK_TXTR_H
  8. #define LWSDK_TXTR_H
  9. typedef struct st_TxtrLayer *LWTLayerID;
  10. typedef struct st_LWMicropol *LWMicropolID;
  11. typedef struct st_TxtrContext *LWTxtrContextID;
  12. #include <lwrender.h>
  13. #include <lwenvel.h>
  14. #include <lwio.h>
  15. /*
  16. Texture coordinate context:
  17. 0 = any: all layers are evaluated.
  18. 1 = object: only object coordinate layers will be evaluated
  19. 2 = world: only world coordinate layers will be evaluated.
  20. The conetxt should usually be set to 0, unless the texture needs
  21. to be evaluated in 2 steps, which is unusual.
  22. */
  23. #define TCC_ANY 0
  24. #define TCC_OBJECT 1
  25. #define TCC_WORLD 2
  26. typedef struct st_LWMicropol {
  27. double oPos[3],wPos[3],oScl[3];
  28. double gNorm[3],wNorm[3],ray[3];
  29. double bumpHeight,txVal;
  30. double spotSize;
  31. double raySource[3];
  32. double rayLength;
  33. double cosine;
  34. double oXfrm[9],wXfrm[9]; // transformation matrix
  35. LWItemID objID,srfID; // object ID, surface ID
  36. LWPntID verts[4]; // surrounding vertex IDs
  37. float weights[4]; // vertex weigths
  38. float vertsWPos[4][3]; // vertex world positions
  39. int polNum,oAxis,wAxis,context; // polygon number, dominant axis in object and world coordinates, coordinates context
  40. LWIlluminateFunc *illuminate;
  41. LWRayTraceFunc *rayTrace;
  42. LWRayCastFunc *rayCast;
  43. LWRayShadeFunc *rayShade;
  44. void *userData;
  45. LWPolID polygon;
  46. } LWMicropol;
  47. typedef struct st_LWTxtrParamDesc{
  48. char *name; // parameter name for gradient input POPUP
  49. double start,end; // start and end values for this parameter
  50. int type,flags,itemType; // return type (unit), gradient flags
  51. // type of item used by gradient
  52. LWItemID itemID; // item used if any
  53. char *itemName; // item name if any
  54. } LWTxtrParamDesc;
  55. /*input parameter Types */
  56. #define LWIPT_FLOAT 2
  57. #define LWIPT_DISTANCE 3
  58. #define LWIPT_PERCENT 4
  59. #define LWIPT_ANGLE 5
  60. /* gParamDesc flags */
  61. #define LWGF_FIXED_MIN (1<<0) // min value fixed
  62. #define LWGF_FIXED_MAX (1<<1) // max value fixed
  63. #define LWGF_FIXED_START (1<<2) // start param value fixed
  64. #define LWGF_FIXED_END (1<<3) // end param value fixed
  65. #define LWGF_AUTOSIZE (1<<4) // autosize enabled
  66. /* item type*/
  67. #define LWGI_NONE -1
  68. #define LWGI_OBJECT 0
  69. #define LWGI_LIGHT 1
  70. #define LWGI_CAMERA 2
  71. #define LWGI_BONE 3
  72. #define LWGI_VMAP 4
  73. typedef void *gParamData;
  74. typedef struct st_LWTxtrParamFuncs {
  75. double (*paramEvaluate)(LWTxtrParamDesc *param,int paramNb,LWMicropol *mp,gParamData data);
  76. gParamData (*paramTime)(void *userData,LWTxtrParamDesc *param,int paramNb,LWTime t,LWFrame f);
  77. void (*paramCleanup)(LWTxtrParamDesc *param,int paramNb,gParamData data);
  78. } LWTxtrParamFuncs;
  79. #define LWTEXTUREFUNCS_GLOBAL "Texture Functions 2"
  80. typedef struct st_LWTextureFuncs {
  81. LWTxtrContextID (*contextCreate)(LWTxtrParamFuncs funcs);
  82. void (*contextDestroy)(LWTxtrContextID gc);
  83. void (*contextAddParam)(LWTxtrContextID gc,LWTxtrParamDesc pd);
  84. LWTextureID (*create)(int returnType,const char *name,LWTxtrContextID gc,void *userData);
  85. void (*destroy)(LWTextureID txtr);
  86. void (*copy)(LWTextureID to,LWTextureID from);
  87. void (*newtime)(LWTextureID txtr,LWTime t,LWFrame f);
  88. void (*cleanup)(LWTextureID txtr);
  89. void (*load)(LWTextureID txtr,const LWLoadState *loadState);
  90. void (*save)(LWTextureID txtr,const LWSaveState *saveState);
  91. double (*evaluate)(LWTextureID txtr,LWMicropolID mp,double *rv);
  92. void (*setEnvGroup) (LWTextureID txtr,LWChanGroupID grp);
  93. LWTLayerID (*firstLayer)(LWTextureID txtr);
  94. LWTLayerID (*lastLayer)(LWTextureID txtr);
  95. LWTLayerID (*nextLayer)(LWTextureID txtr,LWTLayerID layer);
  96. LWTLayerID (*layerAdd)(LWTextureID txtr,int layerType);
  97. void (*layerSetType)(LWTLayerID layer,int layerType);
  98. int (*layerType)(LWTLayerID layer);
  99. double (*layerEvaluate)(LWTLayerID layer,LWMicropolID mp,double *rv);
  100. LWChanGroupID (*layerEnvGroup)(LWTLayerID layer);
  101. int (*setParam)(LWTLayerID layer,int tag,void *data);
  102. int (*getParam)(LWTLayerID layer,int tag,void *data);
  103. void (*evaluateUV)(LWTLayerID layer,int wAxis,int oAxis,double oPos[3],double wPos[3],double uv[2]);
  104. double (*noise)(double p[3]); // returns Perlin's noise values in [0,1]
  105. void *(*userData)(LWTextureID txtr);
  106. LWChanGroupID (*envGroup)(LWTextureID txtr);
  107. LWTextureID (*texture)(LWTLayerID layer);
  108. const char *(*name)(LWTextureID txtr);
  109. int (*type)(LWTextureID txtr);
  110. LWTxtrContextID (*context)(LWTextureID txtr);
  111. } LWTextureFuncs;
  112. /*layer types*/
  113. #define TLT_IMAGE 0
  114. #define TLT_PROC 1
  115. #define TLT_GRAD 2
  116. /*return types*/
  117. #define TRT_VECTOR 0
  118. #define TRT_COLOR 1
  119. #define TRT_PERCENT 2
  120. #define TRT_SCALAR 3
  121. #define TRT_DISPLACEMENT 4
  122. /* parameter tags */
  123. /* Tag data type*/
  124. typedef enum LWTextureTag
  125. {
  126. TXTAG_POSI, // double [3]
  127. TXTAG_ROTA, // double [3]
  128. TXTAG_SIZE, // double [3]
  129. TXTAG_FALL, // double [3]
  130. TXTAG_PROJ, // int *
  131. TXTAG_AXIS, // int *
  132. TXTAG_WWRP, // double *
  133. TXTAG_HWRP, // double *
  134. TXTAG_COORD,// int *
  135. TXTAG_IMAGE,// ImageID *
  136. TXTAG_VMAP, // VMapID *
  137. TXTAG_ROBJ, // LWItemID *
  138. TXTAG_OPAC, // double *
  139. TXTAG_AA, // int *
  140. TXTAG_AAVAL, // double *
  141. TXTAG_PIXBLEND, // int *
  142. TXTAG_WREPEAT, // int *
  143. TXTAG_HREPEAT // int *
  144. };
  145. /* projection modes */
  146. typedef enum LWTextureProjection {
  147. TXPRJ_PLANAR,
  148. TXPRJ_CYLINDRICAL,
  149. TXPRJ_SPHERICAL,
  150. TXPRJ_CUBIC,
  151. TXPRJ_FRONT,
  152. TXPRJ_UVMAP
  153. };
  154. /* repeat modes */
  155. typedef enum LWTextureRepeatMode {
  156. TXRPT_RESET,
  157. TXRPT_REPEAT,
  158. TXRPT_MIRROR,
  159. TXRPT_EDGE
  160. };
  161. #endif