Text archives Help
- From: thiago@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [Manta] r1705 - in trunk: Interface Model/Primitives
- Date: Sun, 2 Sep 2007 19:53:16 -0600 (MDT)
Author: thiago
Date: Sun Sep 2 19:53:15 2007
New Revision: 1705
Modified:
trunk/Interface/MeshTriangle.h
trunk/Model/Primitives/KenslerShirleyTriangle.cc
trunk/Model/Primitives/KenslerShirleyTriangle.h
trunk/Model/Primitives/WaldTriangle.cc
trunk/Model/Primitives/WaldTriangle.h
Log:
KenslerShirleyTriangle no longer has local copies of vertices. This
barely affects render performance (less than 1% hit), makes the code
simpler, makes triangle updates faster/easier, and according to
Solomon, allows for time-varying effects, such as motion blur
(although this might require the intersection code to use getVertex
instead of computing the vertex itself and other changes).
Also pushed up the computeBounds from Wald and KenslerShirley to MeshTriangle.
Modified: trunk/Interface/MeshTriangle.h
==============================================================================
--- trunk/Interface/MeshTriangle.h (original)
+++ trunk/Interface/MeshTriangle.h Sun Sep 2 19:53:15 2007
@@ -28,6 +28,13 @@
return mesh->vertices[mesh->vertex_indices[index+which]];
}
+ virtual void computeBounds(const PreprocessContext& context,
+ BBox& bbox) const
+ {
+ bbox.extendByBox(mesh->getBBox(myID));
+ }
+
+
protected:
MeshTriangle(): myID(0), mesh(NULL) { }
MeshTriangle(Mesh *mesh, unsigned int id): myID(id), mesh(mesh) { }
Modified: trunk/Model/Primitives/KenslerShirleyTriangle.cc
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.cc (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.cc Sun Sep 2 19:53:15
2007
@@ -14,15 +14,6 @@
KenslerShirleyTriangle::KenslerShirleyTriangle(Mesh *mesh, unsigned int id):
MeshTriangle(mesh, id)
{
- update();
-}
-
-void KenslerShirleyTriangle::update()
-{
- const unsigned int index = myID*3;
- p0 = mesh->vertices[mesh->vertex_indices[index+0]];
- p1 = mesh->vertices[mesh->vertex_indices[index+1]];
- p2 = mesh->vertices[mesh->vertex_indices[index+2]];
}
KenslerShirleyTriangle* KenslerShirleyTriangle::clone(CloneDepth depth,
Clonable* incoming)
@@ -31,10 +22,8 @@
if (incoming)
copy = static_cast<KenslerShirleyTriangle*>(incoming);
else
- copy = new KenslerShirleyTriangle();
- copy->p0 = p0;
- copy->p1 = p1;
- copy->p2 = p2;
+ return new KenslerShirleyTriangle(mesh, myID);
+
copy->myID = myID;
copy->mesh = mesh;
@@ -44,16 +33,9 @@
Interpolable::InterpErr KenslerShirleyTriangle::serialInterpolate(const
std::vector<keyframe_t> &keyframes)
{
//We assume that the mesh has already been interpolated.
- update();
return success;
}
-void KenslerShirleyTriangle::computeBounds(const PreprocessContext& context,
- BBox& bbox) const
-{
- bbox.extendByBox(mesh->getBBox(myID));
-}
-
void KenslerShirleyTriangle::preprocess(const PreprocessContext& context)
{
if (context.proc != 0) { context.done(); return; }
@@ -63,7 +45,6 @@
//mesh class and just iterate over the materials. Not sure how to do
//that, so we will do extra work for now.
mesh->materials[mesh->face_material[myID]]->preprocess(context);
- update();
context.done();
}
@@ -125,6 +106,11 @@
const sse_t eps4 = set4( T_EPSILON );
+ const unsigned int index = myID*3;
+ const Vector p0 = mesh->vertices[mesh->vertex_indices[index+0]];
+ const Vector p1 = mesh->vertices[mesh->vertex_indices[index+1]];
+ const Vector p2 = mesh->vertices[mesh->vertex_indices[index+2]];
+
const sse_t p1x = set4( p1[ 0 ] );
const sse_t p1y = set4( p1[ 1 ] );
const sse_t p1z = set4( p1[ 2 ] );
@@ -277,6 +263,12 @@
RayPacketData *data = rays.data;
const int ray_begin = rays.begin();
const int ray_end = rays.end();
+
+ const unsigned int index = myID*3;
+ const Vector p0 = mesh->vertices[mesh->vertex_indices[index+0]];
+ const Vector p1 = mesh->vertices[mesh->vertex_indices[index+1]];
+ const Vector p2 = mesh->vertices[mesh->vertex_indices[index+2]];
+
const Vector edge0 = p1 - p0;
const Vector edge1 = p0 - p2;
const Vector normal = Cross( edge0, edge1 );
@@ -326,20 +318,15 @@
rays.setNormal(ray, normal);
}
} else {
+ const unsigned int index = myID*3;
+ const Vector p0 = mesh->vertices[mesh->vertex_indices[index+0]];
+ const Vector p1 = mesh->vertices[mesh->vertex_indices[index+1]];
+ const Vector p2 = mesh->vertices[mesh->vertex_indices[index+2]];
+
const Vector edge0 = p1 - p0;
const Vector edge1 = p2 - p0;
const Vector normal = Cross(edge0, edge1);
for(int ray=rays.begin(); ray<rays.end(); ray++)
rays.setNormal(ray, normal);
}
-}
-
-Vector KenslerShirleyTriangle::getVertex(unsigned int which)
-{
- ASSERT(which < 3);
- switch(which) {
- case 0: return p0;
- case 1: return p1;
- default: return p2;
- };
}
Modified: trunk/Model/Primitives/KenslerShirleyTriangle.h
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.h (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.h Sun Sep 2 19:53:15
2007
@@ -25,14 +25,9 @@
KenslerShirleyTriangle() { }
KenslerShirleyTriangle(Mesh *mesh, unsigned int id);
- void update();
-
virtual KenslerShirleyTriangle* clone(CloneDepth depth, Clonable*
incoming=NULL);
virtual InterpErr serialInterpolate(const std::vector<keyframe_t>
&keyframes);
- void computeBounds(const PreprocessContext& context,
- BBox& bbox) const;
-
virtual void preprocess(const PreprocessContext& context);
virtual void setTexCoordMapper(const TexCoordMapper* new_tex) {
@@ -46,13 +41,6 @@
void intersect(const RenderContext& context, RayPacket& rays) const;
void computeNormal(const RenderContext& context, RayPacket &rays) const;
-
- //which is 0, 1, or 2.
- Vector getVertex(unsigned int which);
-
- protected:
-
- Vector p0, p1, p2;
};
}
Modified: trunk/Model/Primitives/WaldTriangle.cc
==============================================================================
--- trunk/Model/Primitives/WaldTriangle.cc (original)
+++ trunk/Model/Primitives/WaldTriangle.cc Sun Sep 2 19:53:15 2007
@@ -58,13 +58,6 @@
return success;
}
-void WaldTriangle::computeBounds(const PreprocessContext& context,
- BBox& bbox) const
-{
- bbox.extendByBox(mesh->getBBox(myID));
-}
-
-
void WaldTriangle::preprocess(const PreprocessContext& context)
{
if (context.proc != 0) { context.done(); return; }
Modified: trunk/Model/Primitives/WaldTriangle.h
==============================================================================
--- trunk/Model/Primitives/WaldTriangle.h (original)
+++ trunk/Model/Primitives/WaldTriangle.h Sun Sep 2 19:53:15 2007
@@ -31,9 +31,6 @@
virtual WaldTriangle* clone(CloneDepth depth, Clonable* incoming=NULL);
virtual InterpErr serialInterpolate(const std::vector<keyframe_t>
&keyframes);
- void computeBounds(const PreprocessContext& context,
- BBox& bbox) const;
-
virtual void preprocess(const PreprocessContext& context);
virtual void setTexCoordMapper(const TexCoordMapper* new_tex) {
- [Manta] r1705 - in trunk: Interface Model/Primitives, thiago, 09/02/2007
Archive powered by MHonArc 2.6.16.