123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /*
- * LWSDK Header File
- * Copyright 1999, NewTek, Inc.
- *
- * LWTXTR.H -- LightWave Textures
- */
-
- #ifndef LWSDK_TXTR_H
- #define LWSDK_TXTR_H
- typedef struct st_TxtrLayer *LWTLayerID;
- typedef struct st_LWMicropol *LWMicropolID;
- typedef struct st_TxtrContext *LWTxtrContextID;
- #include <lwrender.h>
- #include <lwenvel.h>
- #include <lwio.h>
- /*
- Texture coordinate context:
- 0 = any: all layers are evaluated.
- 1 = object: only object coordinate layers will be evaluated
- 2 = world: only world coordinate layers will be evaluated.
- The conetxt should usually be set to 0, unless the texture needs
- to be evaluated in 2 steps, which is unusual.
- */
- #define TCC_ANY 0
- #define TCC_OBJECT 1
- #define TCC_WORLD 2
- typedef struct st_LWMicropol {
- double oPos[3],wPos[3],oScl[3];
- double gNorm[3],wNorm[3],ray[3];
- double bumpHeight,txVal;
- double spotSize;
- double raySource[3];
- double rayLength;
- double cosine;
- double oXfrm[9],wXfrm[9]; // transformation matrix
- LWItemID objID,srfID; // object ID, surface ID
- LWPntID verts[4]; // surrounding vertex IDs
- float weights[4]; // vertex weigths
- float vertsWPos[4][3]; // vertex world positions
- int polNum,oAxis,wAxis,context; // polygon number, dominant axis in object and world coordinates, coordinates context
- LWIlluminateFunc *illuminate;
- LWRayTraceFunc *rayTrace;
- LWRayCastFunc *rayCast;
- LWRayShadeFunc *rayShade;
- void *userData;
- LWPolID polygon;
- } LWMicropol;
- typedef struct st_LWTxtrParamDesc{
- char *name; // parameter name for gradient input POPUP
- double start,end; // start and end values for this parameter
- int type,flags,itemType; // return type (unit), gradient flags
- // type of item used by gradient
- LWItemID itemID; // item used if any
- char *itemName; // item name if any
- } LWTxtrParamDesc;
- /*input parameter Types */
- #define LWIPT_FLOAT 2
- #define LWIPT_DISTANCE 3
- #define LWIPT_PERCENT 4
- #define LWIPT_ANGLE 5
- /* gParamDesc flags */
- #define LWGF_FIXED_MIN (1<<0) // min value fixed
- #define LWGF_FIXED_MAX (1<<1) // max value fixed
- #define LWGF_FIXED_START (1<<2) // start param value fixed
- #define LWGF_FIXED_END (1<<3) // end param value fixed
- #define LWGF_AUTOSIZE (1<<4) // autosize enabled
- /* item type*/
- #define LWGI_NONE -1
- #define LWGI_OBJECT 0
- #define LWGI_LIGHT 1
- #define LWGI_CAMERA 2
- #define LWGI_BONE 3
- #define LWGI_VMAP 4
- typedef void *gParamData;
- typedef struct st_LWTxtrParamFuncs {
- double (*paramEvaluate)(LWTxtrParamDesc *param,int paramNb,LWMicropol *mp,gParamData data);
- gParamData (*paramTime)(void *userData,LWTxtrParamDesc *param,int paramNb,LWTime t,LWFrame f);
- void (*paramCleanup)(LWTxtrParamDesc *param,int paramNb,gParamData data);
- } LWTxtrParamFuncs;
- #define LWTEXTUREFUNCS_GLOBAL "Texture Functions 2"
- typedef struct st_LWTextureFuncs {
- LWTxtrContextID (*contextCreate)(LWTxtrParamFuncs funcs);
- void (*contextDestroy)(LWTxtrContextID gc);
- void (*contextAddParam)(LWTxtrContextID gc,LWTxtrParamDesc pd);
- LWTextureID (*create)(int returnType,const char *name,LWTxtrContextID gc,void *userData);
- void (*destroy)(LWTextureID txtr);
- void (*copy)(LWTextureID to,LWTextureID from);
- void (*newtime)(LWTextureID txtr,LWTime t,LWFrame f);
- void (*cleanup)(LWTextureID txtr);
- void (*load)(LWTextureID txtr,const LWLoadState *loadState);
- void (*save)(LWTextureID txtr,const LWSaveState *saveState);
- double (*evaluate)(LWTextureID txtr,LWMicropolID mp,double *rv);
- void (*setEnvGroup) (LWTextureID txtr,LWChanGroupID grp);
- LWTLayerID (*firstLayer)(LWTextureID txtr);
- LWTLayerID (*lastLayer)(LWTextureID txtr);
- LWTLayerID (*nextLayer)(LWTextureID txtr,LWTLayerID layer);
- LWTLayerID (*layerAdd)(LWTextureID txtr,int layerType);
- void (*layerSetType)(LWTLayerID layer,int layerType);
- int (*layerType)(LWTLayerID layer);
- double (*layerEvaluate)(LWTLayerID layer,LWMicropolID mp,double *rv);
- LWChanGroupID (*layerEnvGroup)(LWTLayerID layer);
- int (*setParam)(LWTLayerID layer,int tag,void *data);
- int (*getParam)(LWTLayerID layer,int tag,void *data);
- void (*evaluateUV)(LWTLayerID layer,int wAxis,int oAxis,double oPos[3],double wPos[3],double uv[2]);
- double (*noise)(double p[3]); // returns Perlin's noise values in [0,1]
- void *(*userData)(LWTextureID txtr);
- LWChanGroupID (*envGroup)(LWTextureID txtr);
- LWTextureID (*texture)(LWTLayerID layer);
- const char *(*name)(LWTextureID txtr);
- int (*type)(LWTextureID txtr);
- LWTxtrContextID (*context)(LWTextureID txtr);
- } LWTextureFuncs;
- /*layer types*/
- #define TLT_IMAGE 0
- #define TLT_PROC 1
- #define TLT_GRAD 2
- /*return types*/
- #define TRT_VECTOR 0
- #define TRT_COLOR 1
- #define TRT_PERCENT 2
- #define TRT_SCALAR 3
- #define TRT_DISPLACEMENT 4
- /* parameter tags */
- /* Tag data type*/
- typedef enum LWTextureTag
- {
- TXTAG_POSI, // double [3]
- TXTAG_ROTA, // double [3]
- TXTAG_SIZE, // double [3]
- TXTAG_FALL, // double [3]
- TXTAG_PROJ, // int *
- TXTAG_AXIS, // int *
- TXTAG_WWRP, // double *
- TXTAG_HWRP, // double *
- TXTAG_COORD,// int *
- TXTAG_IMAGE,// ImageID *
- TXTAG_VMAP, // VMapID *
- TXTAG_ROBJ, // LWItemID *
- TXTAG_OPAC, // double *
- TXTAG_AA, // int *
- TXTAG_AAVAL, // double *
- TXTAG_PIXBLEND, // int *
- TXTAG_WREPEAT, // int *
- TXTAG_HREPEAT // int *
- };
- /* projection modes */
- typedef enum LWTextureProjection {
- TXPRJ_PLANAR,
- TXPRJ_CYLINDRICAL,
- TXPRJ_SPHERICAL,
- TXPRJ_CUBIC,
- TXPRJ_FRONT,
- TXPRJ_UVMAP
- };
- /* repeat modes */
- typedef enum LWTextureRepeatMode {
- TXRPT_RESET,
- TXRPT_REPEAT,
- TXRPT_MIRROR,
- TXRPT_EDGE
- };
- #endif
|