Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r282 - in branches/newPointVector: Core/Geometry Model/Instances Model/Primitives Model/TexCoordMappers StandAlone


Chronological Thread 
  • From: sparker@sci.utah.edu
  • To: rtrt@sci.utah.edu
  • Subject: [MANTA] r282 - in branches/newPointVector: Core/Geometry Model/Instances Model/Primitives Model/TexCoordMappers StandAlone
  • Date: Tue, 10 May 2005 22:55:38 -0600 (MDT)

Author: sparker
Date: Tue May 10 22:55:37 2005
New Revision: 282

Modified:
   branches/newPointVector/Core/Geometry/AffineTransform.cc
   branches/newPointVector/Core/Geometry/AffineTransform.h
   branches/newPointVector/Core/Geometry/PointVector.h
   branches/newPointVector/Model/Instances/InstanceRST.cc
   branches/newPointVector/Model/Instances/InstanceRT.cc
   branches/newPointVector/Model/Primitives/CMakeLists.txt
   branches/newPointVector/Model/Primitives/Cone.cc
   branches/newPointVector/Model/TexCoordMappers/LinearMapper.cc
   branches/newPointVector/Model/TexCoordMappers/LinearMapper.h
   branches/newPointVector/StandAlone/CMakeLists.txt
Log:
Debugged AffineTransform class


Modified: branches/newPointVector/Core/Geometry/AffineTransform.cc
==============================================================================
--- branches/newPointVector/Core/Geometry/AffineTransform.cc    (original)
+++ branches/newPointVector/Core/Geometry/AffineTransform.cc    Tue May 10 
22:55:37 2005
@@ -196,18 +196,24 @@
     T h = mat[2][1];
     T i = mat[2][2];
 
-    T denom = c*d*h-c*g*e-b*d*i+b*g*f+a*e*i-a*h*f;
+    T denom = c*d*h-c*e*g-b*d*i+b*f*g+a*e*i-a*f*h;
 
     T inv_denom = 1./denom;
     mat[0][0] = (e*i-f*h)*inv_denom;
-    mat[0][1] = (f*g-d*i)*inv_denom;
-    mat[0][2] = (d*h-e*g)*inv_denom;
-    mat[1][0] = (c*h-b*i)*inv_denom;
+    mat[0][1] = (c*h-b*i)*inv_denom;
+    mat[0][2] = (b*f-c*e)*inv_denom;
+    mat[1][0] = (f*g-d*i)*inv_denom;
     mat[1][1] = (a*i-c*g)*inv_denom;
-    mat[1][2] = (b*g-a*h)*inv_denom;
-    mat[2][0] = (b*f-c*e)*inv_denom;
-    mat[2][1] = (c*d-a*f)*inv_denom;
+    mat[1][2] = (c*d-a*f)*inv_denom;
+    mat[2][0] = (d*h-e*g)*inv_denom;
+    mat[2][1] = (b*g-a*h)*inv_denom;
     mat[2][2] = (a*e-b*d)*inv_denom;
+    double x = mat[0][3];
+    double y = mat[1][3];
+    double z = mat[2][3];
+    mat[0][3] = -(mat[0][0]*x + mat[0][1]*y + mat[0][2]*z);
+    mat[1][3] = -(mat[1][0]*x + mat[1][1]*y + mat[1][2]*z);
+    mat[2][3] = -(mat[2][0]*x + mat[2][1]*y + mat[2][2]*z);
   }
 
   template<typename T>
@@ -267,12 +273,12 @@
   // Private helper function.
   template<typename T>
   void AffineTransformT<T>::pre_multiply( T pre[3][3] ) {
-    T tmp[3][3];
+    T tmp[3][4];
 
     // Copy pre into tmp.
     for(int row = 0; row < 3; row++){
-      for(int col = 0; col < 3; col++){
-        tmp[row][col] = pre[row][col];
+      for(int col = 0; col < 4; col++){
+        tmp[row][col] = mat[row][col];
       }
     }
 
@@ -280,65 +286,65 @@
       for(int j=0;j<3;j++){
         T sum = 0;
         for(int k=0;k<3;k++){
-          sum += tmp[i][k] * mat[k][j];
+          sum += pre[i][k] * tmp[k][j];
         }
         mat[i][j] = sum;
       }
-      T sum = mat[i][3];
+      T sum = 0;
       for(int k=0;k<3;k++)
-        sum += tmp[i][k] * mat[k][3];
+        sum += pre[i][k] * tmp[k][3];
       mat[i][3] = sum;
     }
   }
 
   template<typename T>
   PointT<T, 3> operator*(const AffineTransformT<T>& trans, const PointT<T, 
3>& point) {
-        PointT<T,3> result;
-        for (int i=0;i<3;++i) {
-          result[i]  = trans(i,0) * point[0];
-          result[i] += trans(i,1) * point[1];
-               result[i] += trans(i,2) * point[2];
-               result[i] += trans(i,3); // point[3] == 1
-        }
-        return result;
+    PointT<T,3> result;
+    for (int i=0;i<3;++i) {
+      result[i]  = trans(i,0) * point[0];
+      result[i] += trans(i,1) * point[1];
+      result[i] += trans(i,2) * point[2];
+      result[i] += trans(i,3); // point[3] == 1
+    }
+    return result;
   }
   
   template<typename T>
   VectorT<T, 3> operator*(const AffineTransformT<T>& trans, const VectorT<T, 
3>& vec) {
-        VectorT<T,3> result;
-        for (int i=0;i<3;++i) {
-          result[i]  = trans(i,0) * vec[0];
-          result[i] += trans(i,1) * vec[1];
-               result[i] += trans(i,2) * vec[2];
-               // vec[3] == 0
-        }
-        return result;
+    VectorT<T,3> result;
+    for (int i=0;i<3;++i) {
+      result[i]  = trans(i,0) * vec[0];
+      result[i] += trans(i,1) * vec[1];
+      result[i] += trans(i,2) * vec[2];
+      // vec[3] == 0
+    }
+    return result;
   }
 
   // Multiply by the transpose of the AffineTransformation, useful for
   // computations involving an inverse transpose.
   template<typename T>
   PointT<T, 3> transpose_mult(const AffineTransformT<T>& trans, const 
PointT<T, 3>& point) {
-        PointT<T,3> result;
-        for (int i=0;i<3;++i) {
-          result[i]  = trans(0,i) * point[0];
-          result[i] += trans(1,i) * point[1];
-               result[i] += trans(2,i) * point[2];
-               result[i] += trans(3,i); // point[3] == 1
-        }
-        return result;
+    PointT<T,3> result;
+    for (int i=0;i<3;++i) {
+      result[i]  = trans(0,i) * point[0];
+      result[i] += trans(1,i) * point[1];
+      result[i] += trans(2,i) * point[2];
+      result[i] += trans(3,i); // point[3] == 1
+    }
+    return result;
   }
   
   template<typename T>
   VectorT<T, 3> transpose_mult(const AffineTransformT<T>& trans, const 
VectorT<T, 3>& vec) {
-        VectorT<T,3> result;
-        for (int i=0;i<3;++i) {
-          result[i]  = trans(0,i) * vec[0];
-          result[i] += trans(1,i) * vec[1];
-               result[i] += trans(2,i) * vec[2];
-               // vec[3] == 0
-        }
-        return result;  
+    VectorT<T,3> result;
+    for (int i=0;i<3;++i) {
+      result[i]  = trans(0,i) * vec[0];
+      result[i] += trans(1,i) * vec[1];
+      result[i] += trans(2,i) * vec[2];
+      // vec[3] == 0
+    }
+    return result;      
   }
 
   // Static Instances.

Modified: branches/newPointVector/Core/Geometry/AffineTransform.h
==============================================================================
--- branches/newPointVector/Core/Geometry/AffineTransform.h     (original)
+++ branches/newPointVector/Core/Geometry/AffineTransform.h     Tue May 10 
22:55:37 2005
@@ -61,8 +61,8 @@
     AffineTransformT<T> inverse() const;
     void invert();
 
-        // Const Accessors used by global multiplication operators.
-        const T &operator() (unsigned int r, unsigned int c) const { return 
mat[r][c]; }
+    // Const Accessors used by global multiplication operators.
+    const T &operator() (unsigned int r, unsigned int c) const { return 
mat[r][c]; }
 
     // Post-multiplication
     AffineTransformT<T> operator*(const AffineTransformT<T>& m) const;
@@ -93,13 +93,13 @@
                                                                              
   const VectorT<T, 3>& vec);
 
   template<typename T>
-  ostream &operator << ( ostream &os, const AffineTransformT<T> &trans ) {
-        for (int i=0;i<3;++i) {
-               for (int j=0;j<4;++j) {
-                 os << trans(i,j) << " ";
-               }
-               os << std::endl;
-        }
+    std::ostream &operator << ( std::ostream &os, const AffineTransformT<T> 
&trans ) {
+    for (int i=0;i<3;++i) {
+      for (int j=0;j<4;++j) {
+        os << trans(i,j) << " ";
+      }
+      os << std::endl;
+    }
   }
 }
 

Modified: branches/newPointVector/Core/Geometry/PointVector.h
==============================================================================
--- branches/newPointVector/Core/Geometry/PointVector.h (original)
+++ branches/newPointVector/Core/Geometry/PointVector.h Tue May 10 22:55:37 
2005
@@ -290,20 +290,18 @@
     }
 
   template<typename T, int Dim>
-  inline ostream &operator<< (ostream &os, const VectorT<T,Dim> &v) {
+    inline std::ostream &operator<< (std::ostream &os, const VectorT<T,Dim> 
&v) {
         for (int i=0;i<Dim;++i)
                os << v[i] << " ";
         return os;
   }
 
   template<typename T, int Dim>
-  inline ostream &operator<< (ostream &os, const PointT<T,Dim> &v) {
+    inline std::ostream &operator<< (std::ostream &os, const PointT<T,Dim> 
&v) {
         for (int i=0;i<Dim;++i)
                os << v[i] << " ";
         return os;
   }
-
-  
 }
 
 #endif

Modified: branches/newPointVector/Model/Instances/InstanceRST.cc
==============================================================================
--- branches/newPointVector/Model/Instances/InstanceRST.cc      (original)
+++ branches/newPointVector/Model/Instances/InstanceRST.cc      Tue May 10 
22:55:37 2005
@@ -15,7 +15,7 @@
   // By default, use the texture coordinates and material of the child object
   tex = this;
   material = this;
-  
+
   // Determine the scale of the matrix.  We could use eigenvalue analysis,
   // but this seems easier:  pass in the three axes and make sure that the
   // transformed lengths are all the same

Modified: branches/newPointVector/Model/Instances/InstanceRT.cc
==============================================================================
--- branches/newPointVector/Model/Instances/InstanceRT.cc       (original)
+++ branches/newPointVector/Model/Instances/InstanceRT.cc       Tue May 10 
22:55:37 2005
@@ -224,7 +224,7 @@
   for(int i=0;i<rays.getSize();i++){
     RayPacket::Element& e = rays.get(i);
     e.ray = old_rays[i];
-        e.normal = transform_inv * e.normal;
+    e.normal = transform_inv * e.normal;
   }
   rays.resetFlag(RayPacket::HaveHitPositions);
 }

Modified: branches/newPointVector/Model/Primitives/CMakeLists.txt
==============================================================================
--- branches/newPointVector/Model/Primitives/CMakeLists.txt     (original)
+++ branches/newPointVector/Model/Primitives/CMakeLists.txt     Tue May 10 
22:55:37 2005
@@ -5,7 +5,7 @@
      Primitives/Sphere.cc
      Primitives/SuperEllipsoid.cc
      # Primitives/Cube.cc
-     # Primitives/Cone.cc
+     Primitives/Cone.cc
      Primitives/Triangle.cc
 )
 
@@ -16,4 +16,4 @@
         Primitives/Cube.cc
         Primitives/Cone.cc
         )
-ENDIF(BUILD_BROKEN)
\ No newline at end of file
+ENDIF(BUILD_BROKEN)

Modified: branches/newPointVector/Model/Primitives/Cone.cc
==============================================================================
--- branches/newPointVector/Model/Primitives/Cone.cc    (original)
+++ branches/newPointVector/Model/Primitives/Cone.cc    Tue May 10 22:55:37 
2005
@@ -2,6 +2,7 @@
 #include <Model/Primitives/Cone.h>
 #include <Interface/RayPacket.h>
 #include <Core/Geometry/BBox.h>
+#include <Core/Util/NotFinished.h>
 #include <math.h>
 
 using namespace Manta;
@@ -51,18 +52,10 @@
       double dist_scale = tv.normalize();
       double a = (cosA2*Dot(V-Dot(V,Va)*Va, V-Dot(V,Va)*Va))-
        (sinA2*Dot(V,Va)*Dot(V,Va));
-<<<<<<< .mine
-      double b = 2*cosA2*Dot(V-Dot(V,Va)*Va,
-                            Vector(dP)-Dot(Vector(dP),Va)*Va)-
-       2*sinA2*Dot(V,Va)*Dot(Vector(dP),Va);
-      double c = cosA2*Dot(Vector(dP)-Dot(Vector(dP),Va)*Va,
-                          Vector(dP)-Dot(Vector(dP),Va)*Va)-
-=======
       double b = 2*cosA2*Dot(V-Dot(V,Va)*Va, dP-Dot(dP,Va)*Va)-
        2*sinA2*Dot(V,Va)*Dot(dP,Va);
       double c = cosA2*Dot(dP-Dot(dP,Va)*Va,
                           dP-Dot(dP,Va)*Va)-
->>>>>>> .r267
        sinA2*Dot(dP,Va)*Dot(dP,Va);
       
       double d = sqrt(b*b-4*a*c);
@@ -148,11 +141,15 @@
   rays.computeHitPositions();
   for(int i=0; i<rays.getSize(); i++) {
     RayPacket::Element& e = rays.get(i);
+#if 0
     Vector xn(xform.project(e.hitPosition).asVector());
     xn.z(0.0);
     Vector v=ixform.project(xn);
     v.normalize();
     e.normal = v;
+#else
+    NOT_FINISHED("Cone::computeNormal");
+#endif
   }
 }
 

Modified: branches/newPointVector/Model/TexCoordMappers/LinearMapper.cc
==============================================================================
--- branches/newPointVector/Model/TexCoordMappers/LinearMapper.cc       
(original)
+++ branches/newPointVector/Model/TexCoordMappers/LinearMapper.cc       Tue 
May 10 22:55:37 2005
@@ -9,9 +9,13 @@
                           const Vector& v2, const Vector& v3)
 {
   transform.initWithBasis(v1, v2, v3, origin);
+  transform.invert();
+}
 
-  // Compute the inverse in order to unproject a point.
-  transform_inv = transform.inverse();
+LinearMapper::LinearMapper(const AffineTransform& transform)
+  : transform(transform)
+{
+  this->transform.invert();
 }
 
 LinearMapper::~LinearMapper()
@@ -25,8 +29,8 @@
   for(int i = 0;i<rays.getSize();i++){
     RayPacket::Element& e = rays.get(i);
 
-        // Unproject a hit point by multiplying by inverse.
-    e.texCoords = transform_inv * e.hitPosition;
+    // Unproject a hit point by multiplying by inverse.
+    e.texCoords = transform * e.hitPosition;
   }
   rays.setFlag(RayPacket::HaveTexture2|RayPacket::HaveTexture3);
 }
@@ -39,8 +43,7 @@
     RayPacket::Element& e = rays.get(i);
 
         // Unproject a hit point by multiplying by inverse.
-    e.texCoords = transform_inv * e.hitPosition;
+    e.texCoords = transform * e.hitPosition;
   }
   rays.setFlag(RayPacket::HaveTexture2|RayPacket::HaveTexture3);
 }
-

Modified: branches/newPointVector/Model/TexCoordMappers/LinearMapper.h
==============================================================================
--- branches/newPointVector/Model/TexCoordMappers/LinearMapper.h        
(original)
+++ branches/newPointVector/Model/TexCoordMappers/LinearMapper.h        Tue 
May 10 22:55:37 2005
@@ -24,8 +24,6 @@
     LinearMapper& operator=(const LinearMapper&);
 
     AffineTransform transform;
-        AffineTransform transform_inv;
-        
   };
 }
 

Modified: branches/newPointVector/StandAlone/CMakeLists.txt
==============================================================================
--- branches/newPointVector/StandAlone/CMakeLists.txt   (original)
+++ branches/newPointVector/StandAlone/CMakeLists.txt   Tue May 10 22:55:37 
2005
@@ -12,3 +12,10 @@
                             ${OPENGL_LIBRARIES} 
                             ${X11_LIBRARIES} 
                             -lm)
+
+ADD_EXECUTABLE(transformtest transformtest.cc)
+TARGET_LINK_LIBRARIES(transformtest
+                            Manta_Core 
+                            SCIRun_Core)
+
+ TARGET_LINK_LIBRARIES(transformtest -lm)




  • [MANTA] r282 - in branches/newPointVector: Core/Geometry Model/Instances Model/Primitives Model/TexCoordMappers StandAlone, sparker, 05/10/2005

Archive powered by MHonArc 2.6.16.

Top of page