Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r1768 - trunk/Model/Primitives


Chronological Thread 
  • From: thiago@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [Manta] r1768 - trunk/Model/Primitives
  • Date: Tue, 9 Oct 2007 14:31:55 -0600 (MDT)

Author: thiago
Date: Tue Oct  9 14:31:55 2007
New Revision: 1768

Modified:
   trunk/Model/Primitives/Torus.cc
   trunk/Model/Primitives/Torus.h
Log:
Intersection quality was pretty aweful if you zoomed out even a tiny
bit. Setting everything to doubles seems to fix most of this and makes
the torus actually useful (it's still slow though).


Modified: trunk/Model/Primitives/Torus.cc
==============================================================================
--- trunk/Model/Primitives/Torus.cc     (original)
+++ trunk/Model/Primitives/Torus.cc     Tue Oct  9 14:31:55 2007
@@ -132,7 +132,7 @@
   return number_of_roots;
 }
 
-Torus::Torus(Material* mat, Real minor_radius, Real major_radius)
+Torus::Torus(Material* mat, double minor_radius, double major_radius)
   : PrimitiveCommon(mat, this), minor_radius(minor_radius), 
major_radius(major_radius)
 {
 }
@@ -149,11 +149,11 @@
     const Vector O = rays.getOrigin(i);
     const Vector D = rays.getDirection(i);
 
-    const Real O_dot_D = Dot(O,D);
-    const Real major_radius_squared = major_radius * major_radius;
-    const Real minor_radius_squared = minor_radius * minor_radius;
+    const double O_dot_D = Dot(O,D);
+    const double major_radius_squared = major_radius * major_radius;
+    const double minor_radius_squared = minor_radius * minor_radius;
 
-    Real term = (  Dot(O,O)  - major_radius_squared - minor_radius_squared );
+    double term = (  Dot(O,O)  - major_radius_squared - minor_radius_squared 
);
     double coefficients[ 5 ];
     coefficients[ 0 ] = 1.0;
     coefficients[ 1 ] = 4.0 * O_dot_D;
@@ -172,10 +172,10 @@
   rays.computeHitPositions();
   for(int i=rays.begin(); i<rays.end(); i++) {
     Vector intersection_point = rays.getHitPosition(i);
-    float magnitude = Sqrt( intersection_point[ 0 ] * intersection_point[ 0 
] +
+    double magnitude = Sqrt( intersection_point[ 0 ] * intersection_point[ 0 
] +
                             intersection_point[ 1 ] * intersection_point[ 1 
] );
-    float one_over_minor_radius = 1.0f / minor_radius;
-    float scale = ( 1.0f - major_radius / magnitude ) * 
one_over_minor_radius;
+    double one_over_minor_radius = 1.0f / minor_radius;
+    double scale = ( 1.0f - major_radius / magnitude ) * 
one_over_minor_radius;
     Vector normal( intersection_point[ 0 ] * scale,
                    intersection_point[ 1 ] * scale,
                    intersection_point[ 2 ] * one_over_minor_radius );
@@ -185,7 +185,7 @@
 }
 
 void Torus::computeTexCoords2(const RenderContext&,
-                            RayPacket& rays) const
+                              RayPacket& rays) const
 {
   for(int i=rays.begin();i<rays.end();i++)
     rays.setTexCoords(i, rays.scratchpad<Vector>(i));
@@ -193,7 +193,7 @@
 }
 
 void Torus::computeTexCoords3(const RenderContext& context,
-                                     RayPacket& rays) const
+                              RayPacket& rays) const
 {
   computeTexCoords2(context, rays);
 }

Modified: trunk/Model/Primitives/Torus.h
==============================================================================
--- trunk/Model/Primitives/Torus.h      (original)
+++ trunk/Model/Primitives/Torus.h      Tue Oct  9 14:31:55 2007
@@ -9,19 +9,19 @@
 {
   class Torus : public PrimitiveCommon, public TexCoordMapper {
   public:
-    Torus(Material* mat, Real minor_radius, Real major_radius);
+    Torus(Material* mat, double minor_radius, double major_radius);
     
     virtual void computeBounds(const PreprocessContext& context,
                                BBox& bbox) const;
     virtual void intersect(const RenderContext& context, RayPacket& rays) 
const;
     virtual void computeNormal(const RenderContext& context, RayPacket 
&rays) const;    
     virtual void computeTexCoords2(const RenderContext& context,
-                                  RayPacket& rays) const;
+                                   RayPacket& rays) const;
     virtual void computeTexCoords3(const RenderContext& context,
-                                  RayPacket& rays) const;
+                                   RayPacket& rays) const;
     
   private:
-    Real minor_radius, major_radius;
+    double minor_radius, major_radius;
   };
 }
 




  • [Manta] r1768 - trunk/Model/Primitives, thiago, 10/09/2007

Archive powered by MHonArc 2.6.16.

Top of page