Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r2347 - in trunk: Model/Readers scenes


Chronological Thread 
  • From: "Thiago Ize" < >
  • To:
  • Subject: [Manta] r2347 - in trunk: Model/Readers scenes
  • Date: Thu, 13 Nov 2008 16:22:47 -0700 (MST)

Author: thiago
Date: Thu Nov 13 16:22:46 2008
New Revision: 2347

Added:
   trunk/Model/Readers/MReader.cc
   trunk/Model/Readers/MReader.h
Modified:
   trunk/Model/Readers/CMakeLists.txt
   trunk/scenes/triangleSceneViewer.cc
Log:
Added the ability to load .m files. These are files of the form:

Vertex <id> <x> <y> <z>
Face   <id> <vId1> <vId2> <vId3>


Modified: trunk/Model/Readers/CMakeLists.txt
==============================================================================
--- trunk/Model/Readers/CMakeLists.txt  (original)
+++ trunk/Model/Readers/CMakeLists.txt  Thu Nov 13 16:22:46 2008
@@ -4,6 +4,8 @@
   Readers/glm/glm.cc
   Readers/rply/rply.c
   Readers/IW.cc
+  Readers/MReader.h
+  Readers/MReader.cc
   Readers/PlyReader.cc
   Readers/V3C1.h
   Readers/V3C1.cc

Added: trunk/Model/Readers/MReader.cc
==============================================================================
--- (empty file)
+++ trunk/Model/Readers/MReader.cc      Thu Nov 13 16:22:46 2008
@@ -0,0 +1,97 @@
+#include <Model/Readers/MReader.h>
+#include <Model/Materials/Lambertian.h>
+#include <Model/Textures/NormalTexture.h>
+#include <Model/Primitives/WaldTriangle.h>
+#include <Model/Primitives/KenslerShirleyTriangle.h>
+#include <Model/Primitives/MovingKSTriangle.h>
+
+#include <fstream>
+
+using namespace Manta;
+using namespace std;

+Mesh* Manta::readM(const std::string &filename,
+                    Material *defaultMaterial,
+                    const MeshTriangle::TriangleType triangleType)
+{
+  ifstream in(filename.c_str());
+  if (!in) {
+    cerr << "Error trying to read in .m file: " 
+         << filename << endl;
+    return NULL;
+  }
+
+  Mesh *mesh = new Mesh;
+
+  if (defaultMaterial == NULL)
+    defaultMaterial = new Lambertian( new NormalTexture() );
+  mesh->materials.push_back(defaultMaterial);
+
+
+  while (in.good()) {
+    string type;
+    in >> type;
+
+    if (type == "Vertex") {
+      size_t i;
+      in >> i;
+      if (mesh->vertices.size() < i)
+        mesh->vertices.resize(i);
+
+      in >> mesh->vertices[i-1];
+    }
+    else if (type == "Face") {
+      size_t i;
+      in >> i;
+
+      if (mesh->vertex_indices.size() < i*3)
+        mesh->vertex_indices.resize(i*3);
+      
+      int idx;
+      in >> idx; mesh->vertex_indices[i*3-3] = idx-1;
+      in >> idx; mesh->vertex_indices[i*3-2] = idx-1;
+      in >> idx; mesh->vertex_indices[i*3-1] = idx-1;
+
+      mesh->face_material.push_back(0);
+    }
+    else {
+      //do nothing.
+    }
+  }
+
+  size_t numTri = mesh->face_material.size();
+
+  WaldTriangle *wald_triangles = NULL;
+  KenslerShirleyTriangle *KS_triangles = NULL;
+  MovingKSTriangle* MovingKS_triangles = NULL;
+  switch (triangleType) {
+  case MeshTriangle::WALD_TRI:
+    wald_triangles = new WaldTriangle[numTri];
+    break;
+  case MeshTriangle::KENSLER_SHIRLEY_TRI:
+    KS_triangles = new KenslerShirleyTriangle[numTri];
+    break;
+  case MeshTriangle::MOVING_KS_TRI:
+    MovingKS_triangles = new MovingKSTriangle[numTri];
+    break;
+  default:
+    throw InternalError("Invalid triangle type");
+    break;
+  }
+
+  for (size_t i=0; i < numTri; ++i) {
+    switch (triangleType) {
+    case MeshTriangle::WALD_TRI:
+      mesh->addTriangle(&wald_triangles[i]);
+      break;
+    case MeshTriangle::KENSLER_SHIRLEY_TRI:
+      mesh->addTriangle(&KS_triangles[i]);
+      break;
+    case MeshTriangle::MOVING_KS_TRI:
+      mesh->addTriangle(&MovingKS_triangles[i]);
+      break;
+    }
+  }
+
+  return mesh;
+}

Added: trunk/Model/Readers/MReader.h
==============================================================================
--- (empty file)
+++ trunk/Model/Readers/MReader.h       Thu Nov 13 16:22:46 2008
@@ -0,0 +1,38 @@
+#ifndef Manta_Model_MReader_h
+#define Manta_Model_MReader_h
+
+/* This reads in geometry from an .m format.
+  The m-file looks like:
+
+Vertex 1  -0.0396703 0.036174 -0.00733977
+#this is a comment
+Vertex 2  0.0171854 0.035921 0.00432788
+Vertex 3  -0.0291577 0.0380555 0.005854
+Vertex 4  -0.0310017 0.0339922 0.010953
+Vertex 5  0.0189601 0.036126 0.0191857
+Vertex 6  -0.0438465 0.0359346 0.00839642
+Face 1  25732 14061 11668
+Face 2  27453 19874 33417
+Face 3  2453 1753 1189
+Face 4  15343 27545 5744
+
+*/
+
+#include <Core/Geometry/Vector.h>
+#include <Core/Geometry/VectorT.h>
+#include <Model/Groups/Mesh.h>
+#include <Model/Primitives/MeshTriangle.h>
+#include <MantaTypes.h>
+#include <string>
+
+namespace Manta {
+
+  //returns NULL if problem reading in m file.
+  Mesh* readM(const std::string &filename,
+              Material *defaultMaterial=NULL,
+              const MeshTriangle::TriangleType triangleType=
+              MeshTriangle::KENSLER_SHIRLEY_TRI);
+
+} // end namespace Manta
+
+#endif // Manta_Model_MReader_h

Modified: trunk/scenes/triangleSceneViewer.cc
==============================================================================
--- trunk/scenes/triangleSceneViewer.cc (original)
+++ trunk/scenes/triangleSceneViewer.cc Thu Nov 13 16:22:46 2008
@@ -25,6 +25,7 @@
 #include <Model/Primitives/Parallelogram.h>
 #include <Model/Readers/PlyReader.h>
 #include <Model/Readers/IW.h>
+#include <Model/Readers/MReader.h>
 #include <Model/Textures/Constant.h>
 #include <Core/Math/MinMax.h>
 
@@ -54,7 +55,7 @@
 #endif
   cerr << " -KDTree   - use KDTree acceleration structure\n";
   cerr << " -rgrid    - use single ray recursive grid acceleration 
structure\n";
-  cerr << " -model    - Required. The file to load (obj or ply file)\n";
+  cerr << " -model    - Required. The file to load (obj, ply, iw, or m 
file)\n";
   cerr << "             Can call this multiple times to load an 
animation.\n";
   cerr << " -save [filename]    - save acceleration structure to file 
(currently kdtree and bsp).\n";
   cerr << " -load [filename]    - load acceleration structure from file 
(currently kdtree and bsp).\n";
@@ -98,6 +99,9 @@
   }
   else if  (!strncmp(modelName.c_str()+modelName.length()-3, ".iw", 3)) {
     frame = readIW(modelName, triangleType);
+  }
+  else if  (!strncmp(modelName.c_str()+modelName.length()-2, ".m", 2)) {
+    frame = readM(modelName, defaultMatl, triangleType);
   }
 
   if (overrideMatl) {


  • [Manta] r2347 - in trunk: Model/Readers scenes, Thiago Ize, 11/13/2008

Archive powered by MHonArc 2.6.16.

Top of page