Revision: 20525
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20525
Author:   jaguarandi
Date:     2009-05-31 04:35:58 +0200 (Sun, 31 May 2009)

Log Message:
-----------
*Some debug
*Some more integration with bli bvh (just testing stuff)

Modified Paths:
--------------
    
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h
    branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c
    
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_bvh.c
    branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h 
    2009-05-31 01:33:44 UTC (rev 20524)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h 
    2009-05-31 02:35:58 UTC (rev 20525)
@@ -45,6 +45,7 @@
 
 /* RayObject constructors */
 RayObject* RE_rayobject_octree_create(int ocres, int size);
+RayObject* RE_rayobject_bvh_create(int size);
 
 //RayObject* RayObject_derivedmesh_create(struct DerivedMesh*, void *ob);
 RayObject* RE_rayobject_mesh_create(struct Mesh*, void *ob);
@@ -54,9 +55,12 @@
 {
        float start[3];
        float vec[3];
+       float labda;
+       
+       float dist; /* length of vec, configured by RE_rayobject_raycast */
 /*     float end[3];                    - not used */
 
-       float labda, u, v;
+       float u, v;
        
        struct
        {

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c    
    2009-05-31 01:33:44 UTC (rev 20524)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c    
    2009-05-31 02:35:58 UTC (rev 20525)
@@ -27,8 +27,10 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 #include <assert.h>
+#include <stdio.h>
 
 #include "BKE_utildefines.h"
+#include "BLI_arithb.h"
 
 #include "RE_raytrace.h"
 #include "render_types.h"
@@ -264,6 +266,7 @@
 
                is->hit.ob   = face->ob;
                is->hit.face = face->face;
+               is->last_hit = (RayObject*)face;
                return 1;
        }
 
@@ -272,6 +275,19 @@
 
 int RE_rayobject_raycast(RayObject *r, Isect *i)
 {
+       static int casted_rays = 0;
+       
+       if(casted_rays++ % (1<<20) == 0)
+               printf("Casting %d rays\n", casted_rays);
+
+       i->vec[0] *= i->labda;
+       i->vec[1] *= i->labda;
+       i->vec[2] *= i->labda;
+       i->labda = 1.0f; //RE_RAYTRACE_MAXDIST; //len;
+       i->dist = VecLength(i->vec);
+       
+               
+       assert(i->mode==RE_RAY_SHADOW);
        if(i->mode==RE_RAY_SHADOW && i->last_hit && 
RE_rayobject_intersect(i->last_hit, i))
                return 1;
 
@@ -280,27 +296,14 @@
 
 int RE_rayobject_intersect(RayObject *r, Isect *i)
 {
-       assert(i->mode==RE_RAY_SHADOW);
        if(RayObject_isFace(r))
        {
                return intersect_rayface( (RayFace*) r, i);
        }
        else
        {
-               //TODO should be done somewhere else
-//             float len = Normalize( i->vec );
-               int hit;
-               i->vec[0] *= i->labda;
-               i->vec[1] *= i->labda;
-               i->vec[2] *= i->labda;
-               i->labda = 1.0f; //RE_RAYTRACE_MAXDIST; //len;
-               
                r = RayObject_align( r );
-
-               hit = r->api->raycast( r, i );
-//             i->labda /= len;
-               
-               return hit;
+               return r->api->raycast( r, i );
        }
 }
 

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_bvh.c
===================================================================
--- 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_bvh.c
    2009-05-31 01:33:44 UTC (rev 20524)
+++ 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_bvh.c
    2009-05-31 02:35:58 UTC (rev 20525)
@@ -65,7 +65,7 @@
        assert( RayObject_isAligned(obj) ); /* RayObject API assumes real data 
to be 4-byte aligned */  
        
        obj->rayobj.api = &bvh_api;
-       obj->bvh = BLI_bvhtree_new(size, 0.0, 4, 6);
+       obj->bvh = BLI_bvhtree_new(size, 0.0, 2, 6);
        
        return RayObject_unalign((RayObject*) obj);
 }
@@ -78,19 +78,23 @@
        if(RE_rayobject_intersect(face,isect))
        {
                hit->index = index;
-//             hit.distance = TODO
+
+               if(isect->mode == RE_RAY_SHADOW)
+                       hit->dist = 0;
        }
 }
 
 static int  RayObject_bvh_intersect(RayObject *o, Isect *isec)
 {
        BVHObject *obj = (BVHObject*)o;
-       float dir[3];
-       VECCOPY( dir, isec->vec );
-       Normalize( dir );
+//     float dir[3];
+//     VECCOPY( dir, isec->vec );
+//     Normalize( dir );
+       BVHTreeRayHit hit;
+       hit.index = 0;
+       hit.dist = isec->labda*isec->dist;
        
-       //BLI_bvhtree_ray_cast returns -1 on non hit (in case we dont give a 
Hit structure
-       return BLI_bvhtree_ray_cast(obj->bvh, isec->start, dir, 0.0, NULL, 
bvh_callback, isec) != -1;
+       return BLI_bvhtree_ray_cast(obj->bvh, isec->start, isec->vec, 0.0, 
&hit, bvh_callback, isec) != 0;
 }
 
 static void RayObject_bvh_add(RayObject *o, RayObject *ob)

Modified: 
branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c 
2009-05-31 01:33:44 UTC (rev 20524)
+++ branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c 
2009-05-31 02:35:58 UTC (rev 20525)
@@ -122,6 +122,7 @@
        double lasttime= PIL_check_seconds_timer();
        int v, totv = 0, totface = 0;
        RayFace *faces, *cur_face;
+       int tot_quads = 0;
 
        //TODO (for now octree only supports RayFaces so we need to create them)
        //
@@ -144,7 +145,9 @@
                }
        }
        
-       re->raytree = RE_rayobject_octree_create( re->r.ocres, totface );
+       printf("RE_rayobject_*_create( %d )\n", totface);
+//     re->raytree = RE_rayobject_octree_create( re->r.ocres, totface );
+       re->raytree = RE_rayobject_bvh_create( totface );
        
        //Fill rayfaces
        re->rayfaces = (RayObject*)MEM_callocN(totface*sizeof(RayFace), "render 
faces");
@@ -182,7 +185,7 @@
                                        cur_face->v1 = vlr->v1->co;
                                        cur_face->v2 = vlr->v2->co;
                                        cur_face->v3 = vlr->v3->co;
-                                       cur_face->v4 = vlr->v4 ? vlr->v4->co : 
NULL;
+                                       cur_face->v4 = vlr->v4 ? tot_quads++, 
vlr->v4->co : NULL;
                                        
                                        cur_face->ob   = (void*)obi;
                                        cur_face->face = vlr;
@@ -194,7 +197,9 @@
                }
        }
 
+       printf("call RE_rayobject_done( %dtri, %dquads )\n", totface-tot_quads, 
tot_quads);
        RE_rayobject_done( re->raytree );
+       printf("return RE_rayobject_done( )\n");
 //TODO vlr_face_coords, vlr_check_intersect, vlr_get_transform, re);
 
        re->i.infostr= NULL;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to