svn merge -r 21301:21372 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
authorAndre Susano Pinto <andresusanopinto@gmail.com>
Sun, 5 Jul 2009 15:20:19 +0000 (15:20 +0000)
committerAndre Susano Pinto <andresusanopinto@gmail.com>
Sun, 5 Jul 2009 15:20:19 +0000 (15:20 +0000)
1  2 
source/blender/render/extern/include/RE_raytrace.h

index ca21433f2297b2e1935e5bba6fa76447a21fb547,8f429f7dd906f9a0eae9be6b5dbf74f981e7f83d..f2fb8c5277a0381c4c08929d9ce642636ce16a7e
  #ifndef RE_RAYTRACE_H
  #define RE_RAYTRACE_H
  
 -/* ray types */
 -#define RE_RAY_SHADOW 0
 -#define RE_RAY_MIRROR 1
 -#define RE_RAY_SHADOW_TRA 2
 +#define RE_RAY_COUNTER
  
 -/* spatial tree for raytracing acceleration */
 -typedef void RayTree;
 -/* abstraction of face type */
 -typedef void RayFace;
 +/* Internals about raycasting structures can be found on intern/raytree.h */
 +typedef struct RayObject RayObject;
 +typedef struct Isect Isect;
 +typedef struct RayCounter RayCounter;
 +struct DerivedMesh;
 +struct Mesh;
  
 -/* object numbers above this are transformed */
 -#define RE_RAY_TRANSFORM_OFFS 0x8000000
 +int  RE_rayobject_raycast(RayObject *r, Isect *i);
 +void RE_rayobject_add    (RayObject *r, RayObject *);
 +void RE_rayobject_done(RayObject *r);
 +void RE_rayobject_free(RayObject *r);
  
 -/* convert from pointer to index in array and back, with offset if the
 - * instance is transformed */
 -#define RAY_OBJECT_SET(re, obi) \
 -      ((obi == NULL)? 0: \
 -      ((obi - (re)->objectinstance) + ((obi->flag & R_TRANSFORMED)? RE_RAY_TRANSFORM_OFFS: 0)))
 +/* RayObject constructors */
  
 -#define RAY_OBJECT_GET(re, i) \
 -      ((re)->objectinstance + ((i >= RE_RAY_TRANSFORM_OFFS)? i-RE_RAY_TRANSFORM_OFFS: i))
 -
 -
 -/* struct for intersection data */
 -typedef struct Isect {
 -      float start[3];                 /* start+vec = end, in ray_tree_intersect */
 -      float vec[3];
 -      float end[3];                   
 +RayObject* RE_rayobject_octree_create(int ocres, int size);
 +RayObject* RE_rayobject_instance_create(RayObject *target, float transform[][4], void *ob, void *target_ob);
  
- #define RE_rayobject_tree_create RE_rayobject_bih_create
 -      float labda, u, v;              /* distance to hitpoint, uv weights */
++#define RE_rayobject_tree_create RE_rayobject_blibvh_create
 +RayObject* RE_rayobject_blibvh_create(int size);      /* BLI_kdopbvh.c   */
 +RayObject* RE_rayobject_bvh_create(int size);         /* rayobject_bvh.c */
 +RayObject* RE_rayobject_bih_create(int size);         /* rayobject_bih.c */
  
 -      RayFace *face;                  /* face is where to intersect with */
 -      int ob;
 -      RayFace *faceorig;              /* start face */
 -      int oborig;
 -      RayFace *face_last;             /* for shadow optimize, last intersected face */
 -      int ob_last;
  
 +/* Ray Intersection */
 +struct Isect
 +{
 +      float start[3];
 +      float vec[3];
 +      float labda;
 +
 +      /* length of vec, configured by RE_rayobject_raycast */
 +      int   bv_index[6];
 +      float idot_axis[3];
 +      float dist;
 +      
 +
 +/*    float end[3];                    - not used */
 +
 +      float u, v;
 +      
 +      struct
 +      {
 +              void *ob;
 +              void *face;
 +/*            RayObject *obj; */
 +      }
 +      hit, orig;
 +      
 +      RayObject *last_hit;    /* last hit optimization */
 +      
        short isect;                    /* which half of quad */
        short mode;                             /* RE_RAY_SHADOW, RE_RAY_MIRROR, RE_RAY_SHADOW_TRA */
        int lay;                                /* -1 default, set for layer lamps */