home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Multimedia Jumpstart 1.1a / CD_ROM.BIN / develpmt / source / triq / 4d / transfor.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-09-12  |  2.3 KB  |  83 lines

  1. /* assumes 4d.h included */
  2.  
  3. /*
  4.  * Constants assumed as transform opcodes
  5.  */
  6.  
  7. #define END        0
  8. #define SCALE      1
  9. #define TRANSLATE  2
  10. #define ROTATEX    3
  11. #define ROTATEY    4
  12. #define ROTATEZ    5
  13. #define PROJECT    6
  14. #define VIEWBOX    7
  15.  
  16. #define PROJECT4D    10
  17. #define SCALE4D      11
  18. #define TRANSLATE4D  12
  19.  
  20. struct TRANSFORM_STRUCT {
  21.     MATRIXFX T;
  22.     MATRIXFX Tinv;
  23. };
  24.  
  25. typedef struct TRANSFORM_STRUCT TRANSFORM;
  26.  
  27. extern TRANSFORM *NewTransform          (void);
  28. extern TRANSFORM *MakeTM          ();
  29.  
  30. extern int      FreeTransform       (TRANSFORM *);
  31. extern int      SetTransform          (TRANSFORM *,...);
  32. extern int      AppendTransform     (TRANSFORM *,...);
  33. extern int      ComposeTransform    (TRANSFORM *,TRANSFORM *);
  34. extern void      InitTransform       (TRANSFORM *);
  35. extern int      SetCTM          (TRANSFORM *);
  36. extern int      TransformPoint      (POINTFX);
  37. extern int      UnTransformPoint    (POINTFX);
  38.  
  39. /*-----------------------------------------------------------------------------
  40.   Global variables and macros for transforming points.
  41. -----------------------------------------------------------------------------*/
  42.  
  43. extern    TRANSFORM *CTM;    /* current transform */
  44. #define SetCTM(T)        (CTM = &(T))
  45. #define TransformPoint(P)   (PxT4D ((P),&CTM->T))
  46. #define UnTransformPoint(P) (PxT4D ((P),&CTM->Tinv))
  47. #define TransformRay(R)     (RayxT4D ((R),&CTM->T))
  48. #define UnTransformRay(R)   (RayxT4D ((R),&CTM->Tinv))
  49. /*
  50.  *  Inplace transform of a ray
  51.  */
  52. #define TRay(R)   ((R).P0=  TransformPoint((R).P0),(R).P1=  TransformPoint((R).P1))
  53. #define UnTRay(R) ((R).P0=UnTransformPoint((R).P0),(R).P1=UnTransformPoint((R).P1))
  54.  
  55. /*
  56.  * Example:
  57.  *
  58.  *  TRANSFORM T;
  59.  *  POINT     P = {10.0,10.0,10.0,1.0};
  60.  *
  61.  *  MakeTransform (&T,
  62.  *             ,TRANSLATE,  1.0, 1.0, 1.0
  63.  *             ,SCALE,      1.0, 1.0, 1.0
  64.  *             ,PROJECT,      1.0, 1.0, 1.0
  65.  *             ,          1.0, 1.0, 1.0
  66.  *             ,          1.0, 1.0, 1.0
  67.  *             ,ROTATEX,      90.0
  68.  *             ,ROTATEY,      90.0
  69.  *             ,ROTATEZ,      90.0
  70.  *             ,TRANSLATE4D,1.0, 1.0, 1.0, 1.0
  71.  *             ,SCALE4D,      1.0, 1.0, 1.0, 1.0
  72.  *             ,PROJECT4D,  1.0, 1.0, 1.0, 1.0
  73.  *             ,          1.0, 1.0, 1.0, 1.0
  74.  *             ,          1.0, 1.0, 1.0, 1.0
  75.  *             ,END         <= Dont forget the END!!!
  76.  *           );
  77.  *
  78.  *  SetCTM (T);
  79.  *  P = TransformPoint (P);
  80.  *  P = UnTransformPoint (P);
  81.  *
  82.  */
  83.