Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1695 - in trunk: Interface Model/Groups Model/Groups/private Model/Primitives Model/Readers


Chronological Thread 
  • From: thiago@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1695 - in trunk: Interface Model/Groups Model/Groups/private Model/Primitives Model/Readers
  • Date: Thu, 30 Aug 2007 16:59:02 -0600 (MDT)

Author: thiago
Date: Thu Aug 30 16:59:01 2007
New Revision: 1695

Modified:
   trunk/Interface/MeshTriangle.h
   trunk/Model/Groups/Mesh.cc
   trunk/Model/Groups/Mesh.h
   trunk/Model/Groups/ObjGroup.cc
   trunk/Model/Groups/private/CGT.h
   trunk/Model/Primitives/CMakeLists.txt
   trunk/Model/Primitives/KenslerShirleyTriangle.cc
   trunk/Model/Primitives/KenslerShirleyTriangle.h
   trunk/Model/Primitives/WaldTriangle.cc
   trunk/Model/Primitives/WaldTriangle.h
   trunk/Model/Readers/PlyReader.cc
Log:
Model/Groups/Mesh: Enforce that addTriangle can only take MeshTriangle.

Model/Groups/private/CGT.h: valgrind was complaining about
uninitialized variables. Technically it would have worked fine...

Model/Groups/ObjGroup.cc,
Model/Readers/PlyReader.cc: These can now load to WaldTriangle or
KenslerShirleyTriangle. Right now that requires modifying a line of
code to switch between the two.  Someday someone will hopefully make
that nicer...

Model/Primitives/WaldTriangle: Use MeshTriangle's getVertex.

Model/Primitives/CMakeLists.txt: Added KenslerShirleyTriangle.

Model/Primitives/KenslerShirleyTriangle.cc: It now appears to fully
work in manta. This seems to perform on par with WaldTriangle for
static scenes and as it requires no preprocess, it can be faster for
dynamic scenes.

Interface/MeshTriangle.h: Added getVertex().


Modified: trunk/Interface/MeshTriangle.h
==============================================================================
--- trunk/Interface/MeshTriangle.h      (original)
+++ trunk/Interface/MeshTriangle.h      Thu Aug 30 16:59:01 2007
@@ -2,16 +2,38 @@
 #define Manta_Interface_MeshTriangle_h
 
 #include <Interface/Primitive.h>
+#include <Model/Groups/Mesh.h>
+#include <SCIRun/Core/Util/Assert.h>
 
 namespace Manta {
 
-  class Mesh;
-
   class MeshTriangle : public Primitive {
   public:
 
-    virtual void attachMesh(Mesh *mesh) = 0;
-    virtual void attachMesh(Mesh *mesh, unsigned int id) = 0;
+    virtual ~MeshTriangle() { };
+
+    virtual void attachMesh(Mesh *mesh) { this->mesh = mesh; }
+
+    virtual void attachMesh(Mesh *mesh, unsigned int id)
+    {
+      this->mesh = mesh;
+      myID = id;
+    }
+
+    //which should be 0, 1, or 2.
+    virtual Vector getVertex(unsigned int which)
+    {
+      ASSERT(which < 3);
+      const unsigned int index = myID*3;
+      return mesh->vertices[mesh->vertex_indices[index+which]];
+    }
+
+  protected:
+    MeshTriangle(): myID(0), mesh(NULL) { }
+    MeshTriangle(Mesh *mesh, unsigned int id): myID(id), mesh(mesh) { }
+
+    unsigned int myID;
+    Mesh *mesh;
   };
 }
 #endif //Manta_Interface_MeshTriangle_h

Modified: trunk/Model/Groups/Mesh.cc
==============================================================================
--- trunk/Model/Groups/Mesh.cc  (original)
+++ trunk/Model/Groups/Mesh.cc  Thu Aug 30 16:59:01 2007
@@ -1,7 +1,7 @@
 #include <Model/Groups/Mesh.h>
-#include <Interface/MeshTriangle.h>
 #include <Core/Util/Preprocessor.h>
 #include <SCIRun/Core/Exceptions/InternalError.h>
+#include <Interface/MeshTriangle.h>
 
 using namespace Manta;
 
@@ -139,9 +139,8 @@
   throw SCIRun::InternalError(string("Illegal call to ") + __func__, 
__FILE__, __LINE__);
 }
 
-void Mesh::addTriangle(Object *tri)
+void Mesh::addTriangle(MeshTriangle *meshTri)
 {
-  MeshTriangle *meshTri = static_cast<MeshTriangle*>(tri);
   meshTri->attachMesh(this, objs.size());
   objs.push_back(meshTri);
 

Modified: trunk/Model/Groups/Mesh.h
==============================================================================
--- trunk/Model/Groups/Mesh.h   (original)
+++ trunk/Model/Groups/Mesh.h   Thu Aug 30 16:59:01 2007
@@ -14,6 +14,7 @@
 
 namespace Manta
 {
+  class MeshTriangle;
   using namespace std;
   class Mesh : public Group {
   public:
@@ -67,7 +68,7 @@
 
     //this only adds the triangle to the group. You still need to add
     //the vertices, materials, etc. to the mesh.
-    virtual void addTriangle(Object *tri);
+    void addTriangle(MeshTriangle *tri);
 
     void computeBounds(const PreprocessContext& context, int proc, int 
numProcs) const;
 

Modified: trunk/Model/Groups/ObjGroup.cc
==============================================================================
--- trunk/Model/Groups/ObjGroup.cc      (original)
+++ trunk/Model/Groups/ObjGroup.cc      Thu Aug 30 16:59:01 2007
@@ -12,6 +12,7 @@
 #include <Model/Materials/Dielectric.h>
 #include <Model/Materials/Flat.h>
 #include <Model/Primitives/WaldTriangle.h>
+#include <Model/Primitives/KenslerShirleyTriangle.h>
 
 #include <iostream>
 #include <map>
@@ -200,7 +201,8 @@
   for (unsigned int i=0; i < model->nummaterials; ++i)
     materials.push_back(material_array[i]);
 
-  WaldTriangle *triangles = new WaldTriangle[model->numtriangles];
+  //WaldTriangle *triangles = new WaldTriangle[model->numtriangles];
+  KenslerShirleyTriangle *triangles = new 
KenslerShirleyTriangle[model->numtriangles];
 
   // Read in the groups.
   GLMgroup *group = model->groups;
@@ -216,8 +218,6 @@
     int total_faces = group->numtriangles;
     for (int i=0;i<total_faces;++i) {
 
-      bool have_textures = true;
-      
       for (int v=0;v<3;++v) {
         int index = model->triangles[ group->triangles[i] ].vindices[v];
         vertex_indices.push_back(index-1);
@@ -243,9 +243,6 @@
         index = model->triangles[ group->triangles[i] ].tindices[v];
         if (index > 0) {
           texture_indices.push_back(index-1);
-        }
-        else {
-          have_textures = false;
         }
       }
 

Modified: trunk/Model/Groups/private/CGT.h
==============================================================================
--- trunk/Model/Groups/private/CGT.h    (original)
+++ trunk/Model/Groups/private/CGT.h    Thu Aug 30 16:59:01 2007
@@ -85,6 +85,7 @@
   int rayID;
   vector <int> mailbox;
   char false_sharing_buffer[128];
+  mailbox_struct() : rayID(0) { }
 };
   mutable vector <mailbox_struct> mailboxes;
 #endif //MAILBOXING
@@ -103,7 +104,7 @@
     assert(x < N_mc[0]);
     assert(y < N_mc[1]);
     assert(z < N_mc[2]);
-    int ofs = x+N_mc[0]*(y+N_mc[1]*(z));
+    unsigned int ofs = x+N_mc[0]*(y+N_mc[1]*(z));
     assert(ofs < cellVector_mc.size());
     return cellVector_mc[ofs];
   }
@@ -115,7 +116,7 @@
     assert(x < N_mc[0]);
     assert(y < N_mc[1]);
     assert(z < N_mc[2]);
-    int ofs = x+N_mc[0]*(y+N_mc[1]*(z));
+    unsigned int ofs = x+N_mc[0]*(y+N_mc[1]*(z));
     assert(ofs < cellVector_mc.size());
     cellVector_mc[ofs] = d;
   }

Modified: trunk/Model/Primitives/CMakeLists.txt
==============================================================================
--- trunk/Model/Primitives/CMakeLists.txt       (original)
+++ trunk/Model/Primitives/CMakeLists.txt       Thu Aug 30 16:59:01 2007
@@ -22,6 +22,8 @@
      Primitives/IsosurfaceGridVolume.h
      Primitives/IsosurfaceOctreeVolume.cc
      Primitives/IsosurfaceOctreeVolume.h
+     Primitives/KenslerShirleyTriangle.h
+     Primitives/KenslerShirleyTriangle.cc
      Primitives/Parallelogram.cc
      Primitives/Parallelogram.h
      Primitives/Plane.cc

Modified: trunk/Model/Primitives/KenslerShirleyTriangle.cc
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.cc    (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.cc    Thu Aug 30 16:59:01 
2007
@@ -11,27 +11,12 @@
 using namespace Manta;
 using namespace std;
 
-KenslerShirleyTriangle::KenslerShirleyTriangle() : myID(0), mesh(NULL)
-{
-}
-
-KenslerShirleyTriangle::KenslerShirleyTriangle(Mesh *mesh, unsigned int id) :
-  myID(id), mesh(mesh)
+KenslerShirleyTriangle::KenslerShirleyTriangle(Mesh *mesh, unsigned int id):
+  MeshTriangle(mesh, id)
 {
   update();
 }
 
-void KenslerShirleyTriangle::attachMesh(Mesh *mesh)
-{
-  this->mesh = mesh;
-}
-
-void KenslerShirleyTriangle::attachMesh(Mesh *mesh, unsigned int id)
-{
-  this->mesh = mesh;
-  myID = id;
-}
-
 void KenslerShirleyTriangle::update()
 {
   const unsigned int index = myID*3;
@@ -123,6 +108,13 @@
 
 #ifdef MANTA_SSE
 
+#define cross4(xout, yout, zout, x1, y1, z1, x2, y2, z2) \
+  {                                                      \
+    xout = sub4(mul4(y1, z2), mul4(z1, y2));             \
+    yout = sub4(mul4(z1, x2), mul4(x1, z2));             \
+    zout = sub4(mul4(x1, y2), mul4(y1, x2));             \
+  }
+
 void KenslerShirleyTriangle::intersect( const RenderContext& context, 
RayPacket& rays ) const {
 
   RayPacketData *data = rays.data;
@@ -169,7 +161,7 @@
     const sse_t dz = load44( &data->direction[ 2 ][ ray ] );
 
     const sse_t det = dot4( normalx, normaly, normalz, dx, dy, dz );
-    const sse_t rcp = reciprocal4( det );
+    const sse_t rcp = oneOver( det );
 
     const sse_t edge2x = sub4( p0x, ox );
     const sse_t edge2y = sub4( p0y, oy );

Modified: trunk/Model/Primitives/KenslerShirleyTriangle.h
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.h     (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.h     Thu Aug 30 16:59:01 
2007
@@ -22,12 +22,9 @@
                    // avoid conflicts.
     };
 
-    KenslerShirleyTriangle();
+    KenslerShirleyTriangle() { }
     KenslerShirleyTriangle(Mesh *mesh, unsigned int id);
 
-    void attachMesh(Mesh *mesh);
-    void attachMesh(Mesh *mesh, unsigned int id);
-
     void update();
 
     virtual KenslerShirleyTriangle* clone(CloneDepth depth, Clonable* 
incoming=NULL);
@@ -56,9 +53,6 @@
   protected:
 
     Vector p0, p1, p2;
-
-    unsigned int myID;
-    Mesh *mesh;
   };
 }
 

Modified: trunk/Model/Primitives/WaldTriangle.cc
==============================================================================
--- trunk/Model/Primitives/WaldTriangle.cc      (original)
+++ trunk/Model/Primitives/WaldTriangle.cc      Thu Aug 30 16:59:01 2007
@@ -3,7 +3,6 @@
 #include <Interface/RayPacket.h>
 #include <Core/Geometry/BBox.h>
 #include <Core/Util/Preprocessor.h>
-#include <SCIRun/Core/Util/Assert.h>
 #include <sgi_stl_warnings_off.h>
 #include <iostream>
 #include <sgi_stl_warnings_on.h>
@@ -11,27 +10,12 @@
 using namespace Manta;
 using namespace std;
 
-WaldTriangle::WaldTriangle() : myID(0), mesh(NULL)
-{
-}
-
-WaldTriangle::WaldTriangle(Mesh *mesh, unsigned int id) :
-  myID(id), mesh(mesh)
+WaldTriangle::WaldTriangle(Mesh *mesh, unsigned int id):
+  MeshTriangle(mesh, id)
 {
   update();
 }
 
-void WaldTriangle::attachMesh(Mesh *mesh)
-{
-  this->mesh = mesh;
-}
-
-void WaldTriangle::attachMesh(Mesh *mesh, unsigned int id)
-{
-  this->mesh = mesh;
-  myID = id;
-}
-
 void WaldTriangle::update()
 {
   const unsigned int index = myID*3;
@@ -559,11 +543,4 @@
     }
     rays.setFlag(RayPacket::HaveUnitNormals);
   }
-}
-
-Vector WaldTriangle::getVertex(unsigned int which)
-{
-  ASSERT(which < 3);
-  const unsigned int index = myID*3;
-  return mesh->vertices[mesh->vertex_indices[index+which]];
 }

Modified: trunk/Model/Primitives/WaldTriangle.h
==============================================================================
--- trunk/Model/Primitives/WaldTriangle.h       (original)
+++ trunk/Model/Primitives/WaldTriangle.h       Thu Aug 30 16:59:01 2007
@@ -23,12 +23,9 @@
                    // avoid conflicts.
     };
     
-    WaldTriangle();
+    WaldTriangle(){ };
     WaldTriangle(Mesh *mesh, unsigned int id);
 
-    void attachMesh(Mesh *mesh);
-    void attachMesh(Mesh *mesh, unsigned int id);
-
     void update();
 
     virtual WaldTriangle* clone(CloneDepth depth, Clonable* incoming=NULL);
@@ -51,9 +48,6 @@
 
     void computeNormal(const RenderContext& context, RayPacket &rays) const;
 
-    //which is 0, 1, or 2.
-    Vector getVertex(unsigned int which);
-
   protected:
     void setPoints(const Vector& p1, const Vector& p2, const Vector& p3);
 
@@ -71,8 +65,6 @@
     float c_nv;
     float c_d;
     
-    unsigned int myID;
-    Mesh *mesh;
   };
 }
 

Modified: trunk/Model/Readers/PlyReader.cc
==============================================================================
--- trunk/Model/Readers/PlyReader.cc    (original)
+++ trunk/Model/Readers/PlyReader.cc    Thu Aug 30 16:59:01 2007
@@ -2,6 +2,7 @@
 #include <Model/Readers/PlyReader.h>
 
 #include <Model/Primitives/WaldTriangle.h>
+#include <Model/Primitives/KenslerShirleyTriangle.h>
 // #include <Model/Primitives/VertexColoredTriangle.h>
 #include <Model/Textures/TriVerTexture.h>
 #include <Model/Materials/Lambertian.h>
@@ -105,7 +106,8 @@
        mesh->vertex_indices.push_back(vertices_start+currVertexIndex);
        
        mesh->face_material.push_back(mesh->materials.size()-1);
-       mesh->addTriangle(new WaldTriangle);
+//        mesh->addTriangle(new WaldTriangle);
+       mesh->addTriangle(new KenslerShirleyTriangle);
 
          if (coloredTriangleMode) {
          //TODO: handle colored triangles.




  • [Manta] r1695 - in trunk: Interface Model/Groups Model/Groups/private Model/Primitives Model/Readers, thiago, 08/30/2007

Archive powered by MHonArc 2.6.16.

Top of page