home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Graphics / Graphics.zip / povsrc31.zip / bbox.h < prev    next >
C/C++ Source or Header  |  2000-05-16  |  4KB  |  112 lines

  1. /****************************************************************************
  2. *                   bbox.h
  3. *
  4. *  This module contains all defines, typedefs, and prototypes for BBOX.C.
  5. *
  6. *  from Persistence of Vision(tm) Ray Tracer
  7. *  Copyright 1996,1999 Persistence of Vision Team
  8. *---------------------------------------------------------------------------
  9. *  NOTICE: This source code file is provided so that users may experiment
  10. *  with enhancements to POV-Ray and to port the software to platforms other
  11. *  than those supported by the POV-Ray Team.  There are strict rules under
  12. *  which you are permitted to use this file.  The rules are in the file
  13. *  named POVLEGAL.DOC which should be distributed with this file.
  14. *  If POVLEGAL.DOC is not available or for more info please contact the POV-Ray
  15. *  Team Coordinator by email to team-coord@povray.org or visit us on the web at
  16. *  http://www.povray.org. The latest version of POV-Ray may be found at this site.
  17. *
  18. * This program is based on the popular DKB raytracer version 2.12.
  19. * DKBTrace was originally written by David K. Buck.
  20. * DKBTrace Ver 2.0-2.12 were written by David K. Buck & Aaron A. Collins.
  21. *
  22. *****************************************************************************/
  23.  
  24. /* NOTE: FRAME.H contains other bound stuff. */
  25.  
  26. #ifndef BBOX_H
  27. #define BBOX_H
  28.  
  29.  
  30.  
  31. /*****************************************************************************
  32. * Global preprocessor defines
  33. ******************************************************************************/
  34.  
  35. /* Generate additional bbox statistics. */
  36.  
  37. /*#define BBOX_EXTRA_STATS 1*/
  38.  
  39.  
  40. /*****************************************************************************
  41. * Global typedefs
  42. ******************************************************************************/
  43.  
  44. typedef int VECTORI[3];
  45. typedef struct BBox_Tree_Struct BBOX_TREE;
  46. typedef struct Rayinfo_Struct RAYINFO;
  47. typedef struct Qelem_Struct QELEM;
  48. typedef struct Priority_Queue_Struct PRIORITY_QUEUE;
  49.  
  50. struct BBox_Tree_Struct
  51. {
  52.   short Infinite;   /* Flag if node is infinite            */
  53.   short Entries;    /* Number of sub-nodes in this node    */
  54.   BBOX BBox;        /* Bounding box of this node           */
  55.   BBOX_TREE **Node; /* If node: children; if leaf: element */
  56. };
  57.  
  58. struct Rayinfo_Struct
  59. {
  60.   VECTOR slab_num;
  61.   VECTOR slab_den;
  62.   VECTORI nonzero;
  63.   VECTORI positive;
  64. };
  65.  
  66. struct Qelem_Struct
  67. {
  68.   DBL Depth;
  69.   BBOX_TREE *Node;
  70. };
  71.  
  72. struct Priority_Queue_Struct
  73. {
  74.   unsigned QSize;
  75.   unsigned Max_QSize;
  76.   QELEM *Queue;
  77. };
  78.  
  79.  
  80.  
  81. /*****************************************************************************
  82. * Global variables
  83. ******************************************************************************/
  84.  
  85. extern BBOX_TREE *Root_Object;
  86.  
  87.  
  88.  
  89. /*****************************************************************************
  90. * Global functions
  91. ******************************************************************************/
  92.  
  93. void Initialize_BBox_Code (void);
  94. void Deinitialize_BBox_Code (void);
  95. void Build_Bounding_Slabs (BBOX_TREE **Root);
  96. void Destroy_Bounding_Slabs (void);
  97. void Recompute_BBox (BBOX *bbox, TRANSFORM *trans);
  98. void Recompute_Inverse_BBox (BBOX *bbox, TRANSFORM *trans);
  99. int  Intersect_BBox_Tree (BBOX_TREE *Root, RAY *ray, INTERSECTION *Best_Intersection, OBJECT **Best_Object);
  100. void Check_And_Enqueue (PRIORITY_QUEUE *Queue, BBOX_TREE *Node, BBOX *BBox, RAYINFO *rayinfo);
  101. void Priority_Queue_Delete (PRIORITY_QUEUE *Queue, DBL *key, BBOX_TREE **Node);
  102. void Build_BBox_Tree (BBOX_TREE **Root, long nFinites, BBOX_TREE **Finite, long nInfinite, BBOX_TREE **Infinite);
  103. void Destroy_BBox_Tree (BBOX_TREE *Node);
  104. void Create_Rayinfo (RAY *Ray, RAYINFO *rayinfo);
  105.  
  106. PRIORITY_QUEUE *Create_Priority_Queue (unsigned QSize);
  107. void Destroy_Priority_Queue (PRIORITY_QUEUE *Queue);
  108.  
  109.  
  110.  
  111. #endif
  112.