Text archives Help
- From: bigler@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r835 - in branches/vertical: Image Interface Model/Groups scenes
- Date: Tue, 10 Jan 2006 14:32:43 -0700 (MST)
Author: bigler
Date: Tue Jan 10 14:32:42 2006
New Revision: 835
Added:
branches/vertical/Image/NRRDFile-stub.cc
Modified:
branches/vertical/Image/CMakeLists.txt
branches/vertical/Interface/RayPacket.h
branches/vertical/Model/Groups/BVH.cc
branches/vertical/Model/Groups/BVH.h
branches/vertical/Model/Groups/CMakeLists.txt
branches/vertical/Model/Groups/RealisticBvh.cc
branches/vertical/scenes/objviewer.cc
Log:
Image/CMakeLists.txt
Image/NRRDFile-stub.cc
If Teem isn't available use the stub file (with stubs of the read
and write functions), so other files that depend on the interface
will link properly.
Interface/RayPacket.h
Added comment on what the values of the signs means.
Model/Groups/BVH.cc
Model/Groups/BVH.h
Mostly indentation and cosmetic changes. It compiled for the
new RayPacket interface before.
Use Real instead of double.
Got rid of length function.
Compute area is now much leaner and doesn't use abs now.
Model/Groups/CMakeLists.txt
Compile BVH.
Model/Groups/RealisticBvh.cc
Now compiles and runs with vertical RayPackets. It a tad slow than
the non vertical code as it is. The speed difference could be in
the primitive, though.
scenes/objviewer.cc
You can now switch to use the BVH instead of the RealisticBvh.
Modified: branches/vertical/Image/CMakeLists.txt
==============================================================================
--- branches/vertical/Image/CMakeLists.txt (original)
+++ branches/vertical/Image/CMakeLists.txt Tue Jan 10 14:32:42 2006
@@ -9,6 +9,9 @@
# Add the include directory to the build
INCLUDE_DIRECTORIES(${FOUND_TEEM_INCLUDE})
+ELSE (FOUND_TEEM_INCLUDE)
+ # Add stubs for these functions
+ SET (NRRD_IMAGE_SRC NRRDFile.h NRRDFile-stub.cc)
ENDIF (FOUND_TEEM_INCLUDE)
IF (FOUND_TEEM_LIB)
Added: branches/vertical/Image/NRRDFile-stub.cc
==============================================================================
--- (empty file)
+++ branches/vertical/Image/NRRDFile-stub.cc Tue Jan 10 14:32:42 2006
@@ -0,0 +1,52 @@
+
+/*
+ For more information, please see:
http://software.sci.utah.edu
+
+ The MIT License
+
+ Copyright (c) 2005
+ Scientific Computing and Imaging Institue, University of Utah
+
+ License for the specific language governing rights and limitations under
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+*/
+
+// This file provides some stubs, so that others that call these
+// functions will be able to link even though the Teem stuff isn't
+// being built.
+
+#include <Image/NRRDFile.h>
+#include <Image/SimpleImage.h>
+
+#include <Core/Exceptions/InputError.h>
+#include <Core/Exceptions/OutputError.h>
+
+using namespace Manta;
+using namespace SCIRun;
+
+extern "C" void writeNRRD( Image const *image, std::string const &file_name
) {
+ throw OutputError( "Nrrd writing not supported by this build. Perhaps you
need to add the path to the Teem libraries.");
+}
+
+extern "C" Image *readNRRD( const std::string &file_name ) {
+
+ throw InputError( "Nrrd reading not supported by this build. Perhaps you
need to add the path to the Teem libraries.");
+ return NULL;
+}
+
Modified: branches/vertical/Interface/RayPacket.h
==============================================================================
--- branches/vertical/Interface/RayPacket.h (original)
+++ branches/vertical/Interface/RayPacket.h Tue Jan 10 14:32:42 2006
@@ -56,7 +56,7 @@
// Int-based arrays
int whichEye[Size];
- int signs[3][Size];
+ int signs[3][Size]; // 1=negative, 0=zero, positive
// Char-based arrays
char scratchpad_data[Size][MaxScratchpadSize];
Modified: branches/vertical/Model/Groups/BVH.cc
==============================================================================
--- branches/vertical/Model/Groups/BVH.cc (original)
+++ branches/vertical/Model/Groups/BVH.cc Tue Jan 10 14:32:42 2006
@@ -102,166 +102,166 @@
//cerr << "top bounds: " << nodes[0].min << " : " << nodes[0].max <<
'\n';
}
else if(buildMode == "table")
- {
- // build 2D cost table, index table, and bbox of each prim
- // set up initial table and mark first prims to combine
- float **costTable = new float*[nprims];
- float *costCols = new float[(nprims*nprims-nprims)/2];
- int *indexTable = new int[nprims];
- Node *objValues = new Node[nprims];
- int i;
-
- {
- indexTable[0] = -0;
- BBox box;
- objs[0]->computeBounds(context,box);
- objValues[0].min = box.getMin();
- objValues[0].max = box.getMax();
- }
- // setup data structures
- for(i=1; i<nprims; i++)
{
- costTable[i] = costCols;
- costCols += i;
- indexTable[i] = -i; // build index table
- BBox box;
- objs[i]->computeBounds(context,box);
- objValues[i].min = box.getMin();
- objValues[i].max = box.getMax();
+ // build 2D cost table, index table, and bbox of each prim
+ // set up initial table and mark first prims to combine
+ float **costTable = new float*[nprims];
+ float *costCols = new float[(nprims*nprims-nprims)/2];
+ int *indexTable = new int[nprims];
+ Node *objValues = new Node[nprims];
+ int i;
- for(int j=i-1; j>=0; j--)
{
- Point min = Min(objValues[i].min,objValues[j].min);
- Point max = Max(objValues[i].max,objValues[j].max);
- //compute area as a cost function
- float area = computeArea(max,min);
- //store cost in table
- costTable[i][j] = area;
- }
+ indexTable[0] = -0;
+ BBox box;
+ objs[0]->computeBounds(context,box);
+ objValues[0].min = box.getMin();
+ objValues[0].max = box.getMax();
+ }
+ // setup data structures
+ for(i=1; i<nprims; i++)
+ {
+ costTable[i] = costCols;
+ costCols += i;
+ indexTable[i] = -i; // build index table
+ BBox box;
+ objs[i]->computeBounds(context,box);
+ objValues[i].min = box.getMin();
+ objValues[i].max = box.getMax();
+
+ for(int j=i-1; j>=0; j--)
+ {
+ Point min = Min(objValues[i].min,objValues[j].min);
+ Point max = Max(objValues[i].max,objValues[j].max);
+ //compute area as a cost function
+ float area = computeArea(max,min);
+ //store cost in table
+ costTable[i][j] = area;
+ }
+ }
+
+ /////////////////////////
+
+ // create tree
+ int marki=0,markj=0;
+ float markval;
+ int iindex=1;
+ for(int k=0; k<nprims-1; k++)
+ {
+ // search table
+ markval = -1;
+ for(i=1; i<nprims-k; i++)
+ {
+ for(int j=i-1; j>=0; j--)
+ {
+ if((costTable[i][j]<markval) || (markval<0))
+ {
+ markval = costTable[i][j];
+ marki=i;
+ markj=j;
+
+ }
+ }
+ }
+
+ // make swap and everything
+ if(marki > markj)
+ {
+ int temp = marki;
+ marki = markj;
+ markj = temp;
+ }
+
+ --i; // bring it back to last index.
+ // find out if primitive or not use appropriate array
+ Point markiMin, markiMax;
+ if(indexTable[marki] <= 0)
+ {
+ markiMin = objValues[-indexTable[marki]].min;
+ markiMax = objValues[-indexTable[marki]].max;
+ }
+ else
+ {
+ markiMin = nodes[indexTable[marki]].min;
+ markiMax = nodes[indexTable[marki]].max;
+ }
+ Point markjMin, markjMax;
+ if(indexTable[markj] <= 0)
+ {
+ markjMin = objValues[-indexTable[markj]].min;
+ markjMax = objValues[-indexTable[markj]].max;
+ }
+ else
+ {
+ markjMin = nodes[indexTable[markj]].min;
+ markjMax = nodes[indexTable[markj]].max;
+ }
+
+ ++iindex; // iindex if for the nodes array
+ // swaping index numbers
+ nodes[iindex].left = indexTable[marki]; // set index of nodes
+ nodes[iindex].right = indexTable[markj];
+ nodes[iindex].min = Min(markiMin,markjMin);
+ nodes[iindex].max = Max(markiMax,markjMax);
+
+ // set new indices
+ indexTable[marki] = iindex;
+ indexTable[markj] = indexTable[nprims-k-1];
+ // replace markj with last column
+ costTable[markj] = costTable[i];
+ // rearange data in new cells
+ for(int m=markj+1; m<i; m++)
+ costTable[m][markj] = costTable[i][m];
+
+ // replace new column with new values
+ Point bmin, bmax;
+ Point mmin, mmax;
+ for(int m=0; m<marki; m++)
+ {
+ if(indexTable[m]<=0)
+ {
+ mmin = objValues[-indexTable[m]].min;
+ mmax = objValues[-indexTable[m]].max;
+ }
+ else
+ {
+ mmin = nodes[indexTable[m]].min;
+ mmax = nodes[indexTable[m]].max;
+ }
+ bmin = Min(nodes[iindex].min,mmin);
+ bmax = Max(nodes[iindex].max,mmax);
+ costTable[marki][m] = computeArea(bmax,bmin);
+ }
+
+ // replace new row with new values
+ for(int m=markj; m<i; m++)
+ {
+ if(indexTable[m]<=0)
+ {
+ mmin = objValues[-indexTable[m]].min;
+ mmax = objValues[-indexTable[m]].max;
+ }
+ else
+ {
+ mmin = nodes[indexTable[m]].min;
+ mmax = nodes[indexTable[m]].max;
+ }
+ bmin = Min(nodes[iindex].min,mmin);
+ bmax = Max(nodes[iindex].max,mmax);
+ costTable[m][marki] = computeArea(bmax,bmin);
+ }
+ }
+
+ // last iteration
+ nodes[1].left = indexTable[0]; // set index of nodes
+ nodes[1].right = indexTable[1];
+ nodes[1].min=Min(nodes[indexTable[0]].min, nodes[indexTable[1]].min);
+ nodes[1].max=Max(nodes[indexTable[0]].max, nodes[indexTable[1]].max);
+
+ delete [] costTable;
+ delete [] indexTable;
+ delete [] objValues;
}
-
- /////////////////////////
-
- // create tree
- int marki=0,markj=0;
- float markval;
- int iindex=1;
- for(int k=0; k<nprims-1; k++)
- {
- // search table
- markval = -1;
- for(i=1; i<nprims-k; i++)
- {
- for(int j=i-1; j>=0; j--)
- {
- if((costTable[i][j]<markval) || (markval<0))
- {
- markval = costTable[i][j];
- marki=i;
- markj=j;
-
- }
- }
- }
-
- // make swap and everything
- if(marki > markj)
- {
- int temp = marki;
- marki = markj;
- markj = temp;
- }
-
- --i; // bring it back to last index.
- // find out if primitive or not use appropriate array
- Point markiMin, markiMax;
- if(indexTable[marki] <= 0)
- {
- markiMin = objValues[-indexTable[marki]].min;
- markiMax = objValues[-indexTable[marki]].max;
- }
- else
- {
- markiMin = nodes[indexTable[marki]].min;
- markiMax = nodes[indexTable[marki]].max;
- }
- Point markjMin, markjMax;
- if(indexTable[markj] <= 0)
- {
- markjMin = objValues[-indexTable[markj]].min;
- markjMax = objValues[-indexTable[markj]].max;
- }
- else
- {
- markjMin = nodes[indexTable[markj]].min;
- markjMax = nodes[indexTable[markj]].max;
- }
-
- ++iindex; // iindex if for the nodes array
- // swaping index numbers
- nodes[iindex].left = indexTable[marki]; // set index of nodes
- nodes[iindex].right = indexTable[markj];
- nodes[iindex].min = Min(markiMin,markjMin);
- nodes[iindex].max = Max(markiMax,markjMax);
-
- // set new indices
- indexTable[marki] = iindex;
- indexTable[markj] = indexTable[nprims-k-1];
- // replace markj with last column
- costTable[markj] = costTable[i];
- // rearange data in new cells
- for(int m=markj+1; m<i; m++)
- costTable[m][markj] = costTable[i][m];
-
- // replace new column with new values
- Point bmin, bmax;
- Point mmin, mmax;
- for(int m=0; m<marki; m++)
- {
- if(indexTable[m]<=0)
- {
- mmin = objValues[-indexTable[m]].min;
- mmax = objValues[-indexTable[m]].max;
- }
- else
- {
- mmin = nodes[indexTable[m]].min;
- mmax = nodes[indexTable[m]].max;
- }
- bmin = Min(nodes[iindex].min,mmin);
- bmax = Max(nodes[iindex].max,mmax);
- costTable[marki][m] = computeArea(bmax,bmin);
- }
-
- // replace new row with new values
- for(int m=markj; m<i; m++)
- {
- if(indexTable[m]<=0)
- {
- mmin = objValues[-indexTable[m]].min;
- mmax = objValues[-indexTable[m]].max;
- }
- else
- {
- mmin = nodes[indexTable[m]].min;
- mmax = nodes[indexTable[m]].max;
- }
- bmin = Min(nodes[iindex].min,mmin);
- bmax = Max(nodes[iindex].max,mmax);
- costTable[m][marki] = computeArea(bmax,bmin);
- }
- }
-
- // last iteration
- nodes[1].left = indexTable[0]; // set index of nodes
- nodes[1].right = indexTable[1];
- nodes[1].min=Min(nodes[indexTable[0]].min, nodes[indexTable[1]].min);
- nodes[1].max=Max(nodes[indexTable[0]].max, nodes[indexTable[1]].max);
-
- delete [] costTable;
- delete [] indexTable;
- delete [] objValues;
- }
else {
throw InternalError("Unknown build mode: "+buildMode, __FILE__, __LINE__
);
}
@@ -316,8 +316,8 @@
Vector t2 = (node->max - e.ray.origin()) * e.inverseDirection;
Vector tn = Min(t1, t2);
Vector tf = Max(t1, t2);
- double tnear = tn.maxComponent();
- double tfar = tf.minComponent();
+ Real tnear = tn.maxComponent();
+ Real tfar = tf.minComponent();
if(tnear <= tfar){
if(node->left <= 0)
// Hit prim
@@ -344,8 +344,8 @@
Vector t2 = (node->max - rays.getOrigin(i)) *
rays.getInverseDirection(i);
Vector tn = Min(t1, t2);
Vector tf = Max(t1, t2);
- double tnear = tn.maxComponent();
- double tfar = tf.minComponent();
+ Real tnear = tn.maxComponent();
+ Real tfar = tf.minComponent();
bool hit = (tnear <= tfar);
cur.bv_hit[i] = hit;
total += (int)hit;
@@ -378,7 +378,7 @@
if(cur.bv_hit[start])
goto out1;
start++;
- }
+ }
// All missed, pop the stack and continue
nstack--;
continue;
@@ -392,7 +392,7 @@
goto out2;
}
end++;
- }
+ }
// Pop the stack
nstack--;
@@ -426,11 +426,11 @@
int numHit = intersect_box(rays, right);
if(numHit == 0)
nstack--;
- }
+ }
}
-
+
// default return since there was none there
//return 0;
-}
+}
#endif
Modified: branches/vertical/Model/Groups/BVH.h
==============================================================================
--- branches/vertical/Model/Groups/BVH.h (original)
+++ branches/vertical/Model/Groups/BVH.h Tue Jan 10 14:32:42 2006
@@ -16,10 +16,11 @@
virtual ~BVH();
virtual void preprocess(const PreprocessContext&);
- virtual void intersect(const RenderContext& context, RayPacket& rays)
const;
+ virtual void intersect(const RenderContext& context,
+ RayPacket& rays) const;
static Group* create(const vector<string>& args);
- private:
+ private:
struct Node {
Point min;
Point max;
@@ -34,19 +35,14 @@
bool bv_hit[RayPacket::MaxSize];
};
inline int intersect_box(RayPacket& rays, StackEntry& cur) const;
- inline float length(const float i, const float j) const
- { return fabsf(i-j); }
inline float computeArea(const Point &max, const Point &min) const
{
- float lenx = length(max.x(),min.x());
- float leny = length(max.y(),min.y());
- float lenz = length(max.z(),min.z());
- return (2*((lenx*leny) + (leny*lenz) + (lenx*lenz)));
+ return 2*(max-min).length2();
}
string buildMode;
- };
+ };
}
#endif
Modified: branches/vertical/Model/Groups/CMakeLists.txt
==============================================================================
--- branches/vertical/Model/Groups/CMakeLists.txt (original)
+++ branches/vertical/Model/Groups/CMakeLists.txt Tue Jan 10 14:32:42
2006
@@ -1,7 +1,7 @@
SET (Manta_Groups_SRCS
- #Groups/BVH.h
- #Groups/BVH.cc
+ Groups/BVH.h
+ Groups/BVH.cc
#Groups/GriddedGroup.h
#Groups/GriddedGroup.cc
Groups/Group.h
Modified: branches/vertical/Model/Groups/RealisticBvh.cc
==============================================================================
--- branches/vertical/Model/Groups/RealisticBvh.cc (original)
+++ branches/vertical/Model/Groups/RealisticBvh.cc Tue Jan 10 14:32:42
2006
@@ -34,6 +34,8 @@
#include <Model/Groups/RealisticBvh.h>
#include <Model/Intersections/AxisAlignedBox.h>
+#include <iostream>
+using namespace std;
using namespace Manta;
@@ -171,52 +173,39 @@
// Intersect the ray packet with the bounds of this node.
bool bbox_intersect[RayPacket::MaxSize];
- VectorT<int, 3> signs[RayPacket::MaxSize];
for(int i=rays.begin();i<rays.end();i++) {
// Check to see if the ray hits this node's bounding box.
Real min_t, max_t;
- signs[i] = rays.getSigns(i);
bbox_intersect[i]
= Intersection::intersectAaBox( bounds, min_t, max_t, rays.getRay(i),
- signs[i], rays.getInverseDirection(i),
+ rays.getSigns(i),
+ rays.getInverseDirection(i),
(Real)0, rays.getMinT(i) );
}
-
- // Find runs of rays which intersect this bounding box and intersect
those
- // with the children.
- int begin = rays.begin();
- int end = 0;
- int first_child;
- while (begin < rays.end()) {
-
+ for(int begin=rays.begin(); begin < rays.end(); ){
// Find the beginning of a run.
while ((begin < rays.end()) && (!bbox_intersect[begin]))
++begin;
-
- // Determine the first child for the first ray in the packet.
- first_child = signs[begin][ split_axis ];
-
- // Find the end of this run.
- end = begin;
- while ((end < rays.end()) && (bbox_intersect[end]) &&
- (signs[begin][ split_axis ] == first_child))
- ++end;
-
- if ((end > begin) && (begin < rays.end())) {
- // Create a sub packet.
- RayPacket sub_packet( rays, begin, end );
-
- // Intersect with both children.
- child[ first_child]->intersect( context, sub_packet );
- child[!first_child]->intersect( context, sub_packet );
-
- }
-
- begin = end;
- }
+ if (begin >= rays.end())
+ // No box intersections left
+ return;
+
+ int end = begin+1;
+ int sign = rays.getSign(begin, split_axis);
+ while(end < rays.end()
+ && bbox_intersect[end]
+ && rays.getSign(end, split_axis) == sign)
+ ++end;
+ RayPacket subPacket(rays, begin, end);
+ // Intersect with both children. sign will be 1 for negative
+ // directions.
+ child[ sign]->intersect( context, subPacket );
+ child[!sign]->intersect( context, subPacket );
+ begin = end;
+ }
}
Modified: branches/vertical/scenes/objviewer.cc
==============================================================================
--- branches/vertical/scenes/objviewer.cc (original)
+++ branches/vertical/scenes/objviewer.cc Tue Jan 10 14:32:42 2006
@@ -47,7 +47,6 @@
#include <Model/Primitives/TexTriangle.h>
#include <Model/Primitives/Parallelogram.h>
#include <Model/Primitives/Cube.h>
-#include <Model/Primitives/BvhTriangleMesh.h>
#include <Model/Materials/Lambertian.h>
#include <Model/Materials/Phong.h>
#include <Model/Materials/Dielectric.h>
@@ -55,6 +54,7 @@
#include <Model/Materials/Flat.h>
#include <Model/Groups/Group.h>
#include <Model/Groups/RealisticBvh.h>
+#include <Model/Groups/BVH.h>
#include <Model/Lights/HeadLight.h>
#include <Model/AmbientLights/ConstantAmbient.h>
#include <Model/Backgrounds/ConstantBackground.h>
@@ -100,6 +100,13 @@
int fix_normals_degrees = 90;
bool flip_faces = false;
+enum {
+ RealisticBvh_Build,
+ BVH_Build
+};
+int which_BVH = RealisticBvh_Build;
+vector<string> BVH_args;
+
///////////////////////////////////////////////////////////////////////////
// This function loads a specified .obj file into a runtime acceleration
// structure for rendering.
@@ -131,6 +138,10 @@
else if (args[i] == "-flip") {
flip_faces = true;
}
+ else if (args[i] == "-BVH") {
+ which_BVH = BVH_Build;
+ parseArgs(args[++i], BVH_args);
+ }
}
/////////////////////////////////////////////////////////////////////////////
@@ -379,12 +390,20 @@
// Create a single bvh to contain the mesh.
Object *create_single_bvh( GLMmodel *model ) {
- TexTriangle **triangle_array;
+ TexTriangle **triangle_array = 0;
+ BVH* bvh_group = 0;
/////////////////////////////////////////////////////////////////////////////
// Allocate storage for primitives and materials.
int total_triangles = model->numtriangles;
- triangle_array = new TexTriangle *[ total_triangles ];
+ switch (which_BVH) {
+ case RealisticBvh_Build:
+ triangle_array = new TexTriangle *[ total_triangles ];
+ break;
+ case BVH_Build:
+ bvh_group = new BVH(BVH_args);
+ break;
+ }
create_materials( model );
@@ -464,30 +483,49 @@
texcoord[0], texcoord[1],
texcoord[2]
);
- triangle_array[tri] = triangle;
-
-
+ switch (which_BVH) {
+ case RealisticBvh_Build:
+ triangle_array[tri] = triangle;
+ break;
+ case BVH_Build:
+ bvh_group->add(triangle);
+ break;
+ }
++tri;
}
-
+
// Move to the next group.
group = group->next;
++mtl;
}
+ std::cerr << "Total triangles added: " << tri << std::endl;
+
+ Object* bvh = 0;
/////////////////////////////////////////////////////////////////////////////
- // Create an acceleration structure.
- std::cerr << "Total triangles added: " << tri << std::endl;
-
- double time_begin = Time::currentSeconds();
-
- // Construct the bvh.
- RealisticBvh *bvh = new RealisticBvh( (Object **)triangle_array,
total_triangles );
-
- double time_end = Time::currentSeconds();
-
- std::cerr << "Bvh creation time: " << (time_end - time_begin) << "
seconds." << std::endl;
-
+ // Create an acceleration structure.
+ switch (which_BVH) {
+ case RealisticBvh_Build:
+ {
+
+ double time_begin = Time::currentSeconds();
+
+ // Construct the bvh.
+ bvh = new RealisticBvh( (Object **)triangle_array, total_triangles );
+
+ double time_end = Time::currentSeconds();
+
+ std::cerr << "Bvh creation time: " << (time_end - time_begin) << "
seconds." << std::endl;
+ }
+ break;
+ case BVH_Build:
+ {
+ bvh = bvh_group;
+ // Preprocesing will be done during the preprocessing phase
+ }
+ break;
+ }
+
/////////////////////////////////////////////////////////////////////////////
// Check the size of bounding boxes.
PreprocessContext p_context;
- [MANTA] r835 - in branches/vertical: Image Interface Model/Groups scenes, bigler, 01/10/2006
Archive powered by MHonArc 2.6.16.