Text archives Help
- From: thiago@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r1432 - trunk/Model/Primitives
- Date: Wed, 27 Jun 2007 18:20:44 -0600 (MDT)
Author: thiago
Date: Wed Jun 27 18:20:43 2007
New Revision: 1432
Modified:
trunk/Model/Primitives/HeavyTriangle.cc
trunk/Model/Primitives/HeavyTriangle.h
trunk/Model/Primitives/TexTriangle.cc
trunk/Model/Primitives/TexTriangle.h
Log:
Primitives/HeavyTriangle.h
Primitives/TexTriangle.cc
Primitives/HeavyTriangle.cc
Primitives/TexTriangle.h:
Added clone and interpolate functions for these classes. Now it's possible to
have dynamic scenes that use these primitives.
Modified: trunk/Model/Primitives/HeavyTriangle.cc
==============================================================================
--- trunk/Model/Primitives/HeavyTriangle.cc (original)
+++ trunk/Model/Primitives/HeavyTriangle.cc Wed Jun 27 18:20:43 2007
@@ -34,6 +34,7 @@
#include <iostream>
#include <sgi_stl_warnings_on.h>
#include <Model/Intersections/TriangleEdge.h>
+#include <assert.h>
using namespace Manta;
using namespace std;
@@ -70,6 +71,33 @@
{
}
+HeavyTriangle* HeavyTriangle::clone(CloneDepth depth, Clonable* incoming)
+{
+ HeavyTriangle *copy;
+ if (incoming)
+ copy = static_cast<HeavyTriangle*>(incoming);
+ else
+ copy = new HeavyTriangle();
+
+ PrimitiveCommon::clone(depth, copy);
+
+ copy->point = point;
+ copy->edge[0] = edge[0];
+ copy->edge[1] = edge[1];
+ copy->n[0] = n[0];
+ copy->n[1] = n[1];
+ copy->n[2] = n[2];
+ return copy;
+}
+
+
+Vector HeavyTriangle::getPoint(int p)
+{
+ assert(p>=0 && p<3);
+ if (p == 0)
+ return point;
+ else return point + edge[p-1];
+}
void HeavyTriangle::intersect(const RenderContext&, RayPacket& rays) const
{
@@ -113,4 +141,26 @@
bbox.extendByPoint( point );
bbox.extendByPoint( point+edge[0] );
bbox.extendByPoint( point+edge[1] );
+}
+
+Interpolable::InterpErr HeavyTriangle::serialInterpolate(const
std::vector<keyframe_t> &keyframes)
+{
+ PrimitiveCommon::interpolate(keyframes);
+ point = Vector(0,0,0);
+ edge[0] = edge[1] = Vector(0,0,0);
+ n[0] = n[1] = n[2] = Vector(0,0,0);
+
+ for (int i=0; i < keyframes.size(); ++i) {
+ Interpolable::keyframe_t kt = keyframes[i];
+ HeavyTriangle *tri = dynamic_cast<HeavyTriangle*>(keyframes[i].keyframe);
+ if (tri == NULL)
+ return notInterpolable;
+ point += tri->point * keyframes[i].t;
+ edge[0] += tri->edge[0] * keyframes[i].t;
+ edge[1] += tri->edge[1] * keyframes[i].t;
+ n[0] += tri->n[0] * keyframes[i].t;
+ n[1] += tri->n[1] * keyframes[i].t;
+ n[2] += tri->n[2] * keyframes[i].t;
+ }
+ return success;
}
Modified: trunk/Model/Primitives/HeavyTriangle.h
==============================================================================
--- trunk/Model/Primitives/HeavyTriangle.h (original)
+++ trunk/Model/Primitives/HeavyTriangle.h Wed Jun 27 18:20:43 2007
@@ -65,6 +65,11 @@
const Vector& n0_, const Vector& n1_, const Vector& n2_ );
virtual ~HeavyTriangle();
+
+ virtual HeavyTriangle* clone(CloneDepth depth, Clonable* incoming=NULL);
+ virtual InterpErr serialInterpolate(const std::vector<keyframe_t>
&keyframes);
+
+ Vector getPoint(int p);
virtual void intersect (const RenderContext& context, RayPacket&
rays) const;
virtual void computeNormal(const RenderContext& context, RayPacket
&rays) const;
Modified: trunk/Model/Primitives/TexTriangle.cc
==============================================================================
--- trunk/Model/Primitives/TexTriangle.cc (original)
+++ trunk/Model/Primitives/TexTriangle.cc Wed Jun 27 18:20:43 2007
@@ -33,6 +33,23 @@
setTexCoordMapper( this );
}
+HeavyTriangle* TexTriangle::clone(CloneDepth depth, Clonable* incoming)
+{
+ TexTriangle *copy;
+ if (incoming)
+ copy = static_cast<TexTriangle*>(static_cast<HeavyTriangle*>(incoming));
+ else
+ copy = new TexTriangle();
+
+ HeavyTriangle::clone(depth, static_cast<HeavyTriangle*>(copy));
+
+ copy->tex[0] = tex[0];
+ copy->tex[1] = tex[1];
+ copy->tex[2] = tex[2];
+
+ return copy;
+}
+
//Performs the exact same operation as computeTexCoords3
void TexTriangle::computeTexCoords2(const RenderContext& /*context*/,
RayPacket& rays) const {
Modified: trunk/Model/Primitives/TexTriangle.h
==============================================================================
--- trunk/Model/Primitives/TexTriangle.h (original)
+++ trunk/Model/Primitives/TexTriangle.h Wed Jun 27 18:20:43 2007
@@ -49,6 +49,8 @@
const Vector &n0_, const Vector &n1_, const Vector
&n2_,
const Vector &tex0_, const Vector &tex1_, const Vector
&tex2_ );
virtual ~TexTriangle() { };
+
+ virtual HeavyTriangle* clone(CloneDepth depth, Clonable* incoming=NULL);
virtual void computeTexCoords2(const RenderContext& context, RayPacket&
rays) const;
virtual void computeTexCoords3(const RenderContext& context, RayPacket&
rays) const {
- [MANTA] r1432 - trunk/Model/Primitives, thiago, 06/27/2007
Archive powered by MHonArc 2.6.16.