Text archives Help
- From: arobison@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [Manta] r1969 - in trunk: Interface Model/Groups Model/Primitives Model/Readers
- Date: Sun, 6 Jan 2008 20:39:02 -0700 (MST)
Author: arobison
Date: Sun Jan 6 20:38:58 2008
New Revision: 1969
Added:
trunk/Model/Primitives/MeshTriangle.cc
trunk/Model/Primitives/MeshTriangle.h
- copied, changed from r1967, trunk/Interface/MeshTriangle.h
Removed:
trunk/Interface/MeshTriangle.h
Modified:
trunk/Model/Groups/KDTree.h
trunk/Model/Groups/Mesh.cc
trunk/Model/Groups/MovingMesh.cc
trunk/Model/Groups/ObjGroup.h
trunk/Model/Primitives/CMakeLists.txt
trunk/Model/Primitives/KenslerShirleyTriangle.h
trunk/Model/Primitives/MovingKSTriangle.h
trunk/Model/Primitives/WaldTriangle.h
trunk/Model/Readers/PlyReader.h
Log:
Moving MeshTriangle to Model and adding an implementation of
computeSurfaceDerivatives based on UV parameterization (and assuming
face normals on triangles). External projects will need to update
their include directives if they directly use MeshTriangle.h
Modified: trunk/Model/Groups/KDTree.h
==============================================================================
--- trunk/Model/Groups/KDTree.h (original)
+++ trunk/Model/Groups/KDTree.h Sun Jan 6 20:38:58 2008
@@ -5,7 +5,7 @@
#include <Core/Geometry/Vector.h>
#include <Core/Util/Preprocessor.h>
#include <Interface/AccelerationStructure.h>
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
#include <Interface/RayPacket.h>
#include <Model/Groups/Group.h>
#include <Model/Groups/Mesh.h>
Modified: trunk/Model/Groups/Mesh.cc
==============================================================================
--- trunk/Model/Groups/Mesh.cc (original)
+++ trunk/Model/Groups/Mesh.cc Sun Jan 6 20:38:58 2008
@@ -2,7 +2,7 @@
#include <Core/Util/Preprocessor.h>
#include <Core/Util/UpdateGraph.h>
#include <Core/Exceptions/InternalError.h>
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
using namespace Manta;
Modified: trunk/Model/Groups/MovingMesh.cc
==============================================================================
--- trunk/Model/Groups/MovingMesh.cc (original)
+++ trunk/Model/Groups/MovingMesh.cc Sun Jan 6 20:38:58 2008
@@ -2,7 +2,7 @@
#include <Core/Util/Preprocessor.h>
#include <Core/Util/UpdateGraph.h>
#include <Core/Exceptions/InternalError.h>
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
using namespace Manta;
Modified: trunk/Model/Groups/ObjGroup.h
==============================================================================
--- trunk/Model/Groups/ObjGroup.h (original)
+++ trunk/Model/Groups/ObjGroup.h Sun Jan 6 20:38:58 2008
@@ -2,7 +2,7 @@
#ifndef MODEL_GROUPS_OBJGROUP__H
#define MODEL_GROUPS_OBJGROUP__H
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
#include <Model/Groups/Mesh.h>
#include <Core/Exceptions/InputError.h>
#include <Model/Readers/glm/glm.h>
Modified: trunk/Model/Primitives/CMakeLists.txt
==============================================================================
--- trunk/Model/Primitives/CMakeLists.txt (original)
+++ trunk/Model/Primitives/CMakeLists.txt Sun Jan 6 20:38:58 2008
@@ -24,6 +24,8 @@
Primitives/IsosurfaceOctreeVolume.h
Primitives/KenslerShirleyTriangle.h
Primitives/KenslerShirleyTriangle.cc
+ Primitives/MeshTriangle.cc
+ Primitives/MeshTriangle.h
Primitives/MovingKSTriangle.h
Primitives/MovingKSTriangle.cc
Primitives/Parallelogram.cc
Modified: trunk/Model/Primitives/KenslerShirleyTriangle.h
==============================================================================
--- trunk/Model/Primitives/KenslerShirleyTriangle.h (original)
+++ trunk/Model/Primitives/KenslerShirleyTriangle.h Sun Jan 6 20:38:58
2008
@@ -1,7 +1,7 @@
#ifndef Manta_Model_KenslerShirleyTriangle_h
#define Manta_Model_KenslerShirleyTriangle_h
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
#include <Interface/RayPacket.h>
#include <Core/Geometry/Vector.h>
#include <Core/Geometry/Ray.h>
Added: trunk/Model/Primitives/MeshTriangle.cc
==============================================================================
--- (empty file)
+++ trunk/Model/Primitives/MeshTriangle.cc Sun Jan 6 20:38:58 2008
@@ -0,0 +1,60 @@
+#include <Model/Primitives/MeshTriangle.h>
+
+using namespace Manta;
+
+void MeshTriangle::computeSurfaceDerivatives(const RenderContext& context,
+ RayPacket& rays) const
+{
+ const int which = myID*3;
+
+ const unsigned int uv0_idx = mesh->texture_indices.size() ?
+ mesh->texture_indices[which] :
Mesh::kNoTextureIndex;
+
+ // No texture coords means use the default implementation
+ if (uv0_idx == Mesh::kNoTextureIndex) {
+ Primitive::computeSurfaceDerivatives(context, rays);
+ return;
+ }
+
+ const unsigned int uv1_idx = mesh->texture_indices[which+1];
+ const unsigned int uv2_idx = mesh->texture_indices[which+2];
+
+ const Vector uv0 = mesh->texCoords[uv0_idx];
+ const Vector uv1 = mesh->texCoords[uv1_idx];
+ const Vector uv2 = mesh->texCoords[uv2_idx];
+
+ const unsigned int vec0_idx = mesh->vertex_indices[which];
+ const unsigned int vec1_idx = mesh->vertex_indices[which+1];
+ const unsigned int vec2_idx = mesh->vertex_indices[which+2];
+
+ const Vector vec0 = mesh->vertices[vec0_idx];
+ const Vector vec1 = mesh->vertices[vec1_idx];
+ const Vector vec2 = mesh->vertices[vec2_idx];
+
+ // compute dPdu and dPdv based on face normals
+ const Vector uv_diff0 = uv1 - uv0;
+ const Vector uv_diff1 = uv2 - uv1;
+
+ const Vector edge0 = vec1 - vec0;
+ const Vector edge1 = vec2 - vec0;
+
+ const Real determinant = (uv_diff0[0] * uv_diff1[1] -
+ uv_diff0[1] * uv_diff1[0]);
+
+ Vector dPdu, dPdv;
+
+ if(Abs(determinant) < 1e-8) {
+ dPdu = edge0;
+ dPdv = edge1;
+ } else {
+ Real inv_det = 1./determinant;
+ dPdu = inv_det * (uv_diff1[1] * edge0 - uv_diff0[1] * edge1);
+ dPdv = inv_det * (uv_diff0[0] * edge1 - uv_diff1[0] * edge0);
+ }
+
+ for(int i = rays.begin(); i != rays.end(); ++i) {
+ rays.setSurfaceDerivativeU(i, dPdu);
+ rays.setSurfaceDerivativeV(i, dPdv);
+ }
+ rays.setFlag( RayPacket::HaveSurfaceDerivatives );
+}
Copied: trunk/Model/Primitives/MeshTriangle.h (from r1967,
trunk/Interface/MeshTriangle.h)
==============================================================================
--- trunk/Interface/MeshTriangle.h (original)
+++ trunk/Model/Primitives/MeshTriangle.h Sun Jan 6 20:38:58 2008
@@ -33,6 +33,9 @@
bbox.extendByBox(mesh->getBBox(myID));
}
+ virtual void computeSurfaceDerivatives(const RenderContext& context,
+ RayPacket& rays) const;
+
//List of the triangle classes that implement MeshTriangle.
enum TriangleType {
WALD_TRI,
Modified: trunk/Model/Primitives/MovingKSTriangle.h
==============================================================================
--- trunk/Model/Primitives/MovingKSTriangle.h (original)
+++ trunk/Model/Primitives/MovingKSTriangle.h Sun Jan 6 20:38:58 2008
@@ -1,7 +1,7 @@
#ifndef Manta_Model_MovingKSTriangle_h
#define Manta_Model_MovingKSTriangle_h
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
#include <Interface/RayPacket.h>
#include <Core/Geometry/Vector.h>
#include <Core/Geometry/Ray.h>
Modified: trunk/Model/Primitives/WaldTriangle.h
==============================================================================
--- trunk/Model/Primitives/WaldTriangle.h (original)
+++ trunk/Model/Primitives/WaldTriangle.h Sun Jan 6 20:38:58 2008
@@ -2,7 +2,7 @@
#ifndef Manta_Model_WaldTriangle_h
#define Manta_Model_WaldTriangle_h
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
#include <Interface/RayPacket.h>
#include <Core/Geometry/Vector.h>
#include <Core/Geometry/Ray.h>
Modified: trunk/Model/Readers/PlyReader.h
==============================================================================
--- trunk/Model/Readers/PlyReader.h (original)
+++ trunk/Model/Readers/PlyReader.h Sun Jan 6 20:38:58 2008
@@ -4,7 +4,7 @@
#include <Core/Geometry/AffineTransform.h>
#include <Model/Groups/Mesh.h>
-#include <Interface/MeshTriangle.h>
+#include <Model/Primitives/MeshTriangle.h>
#include <string>
namespace Manta {
- [Manta] r1969 - in trunk: Interface Model/Groups Model/Primitives Model/Readers, arobison, 01/06/2008
Archive powered by MHonArc 2.6.16.