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