Text archives Help
- 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.