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