added shapes/shapes.h, shapes/BoolShape, made Intersect, Union, and Subtract derive from BoolShape, made BoolShape::setMaterial() call setMaterial() on sub-shapes so that materials applied to boolean objects will be applied to all sub-objects

git-svn-id: svn://anubis/fart/trunk@212 7f9b0f55-74a9-4bce-be96-3c2cd072584d
This commit is contained in:
Josh Holtrop 2009-03-12 02:59:35 +00:00
parent 86888fa461
commit 91e490b65a
13 changed files with 64 additions and 34 deletions

1
.todo
View File

@ -10,7 +10,6 @@ FART To-Do List
- Scene file pre-parser to allow includes, macros, and comments
- Vim syntax file
- Add jitter parameter to lights to effect soft shadow edges
- Do something with materials applied to boolean objects
Low Priority:
- Refraction

View File

@ -11,7 +11,7 @@
#include "util/Ray.h"
#include "util/Color.h"
#include "util/Material.h"
#include "shapes/Shape.h"
#include "shapes/shapes.h"
#include "Light.h"
#include "parser/parser.h"

19
shapes/BoolShape.cc Normal file
View File

@ -0,0 +1,19 @@
#include "BoolShape.h"
BoolShape::BoolShape(refptr<Shape> shape1, refptr<Shape> shape2)
{
m_shape1 = shape1;
m_shape2 = shape2;
}
BoolShape::~BoolShape()
{
}
void BoolShape::setMaterial(refptr<Material> material)
{
m_material = material;
m_shape1->setMaterial(material);
m_shape2->setMaterial(material);
}

20
shapes/BoolShape.h Normal file
View File

@ -0,0 +1,20 @@
#ifndef BOOLSHAPE_H
#define BOOLSHAPE_H BOOLSHAPE_H
#include "Shape.h"
class BoolShape : public Shape
{
public:
BoolShape(refptr<Shape> shape1, refptr<Shape> shape2);
~BoolShape();
virtual IntersectionList intersect(refptr<Shape> _this, const Ray & ray) = 0;
virtual void setMaterial(refptr<Material> material);
protected:
refptr<Shape> m_shape1;
refptr<Shape> m_shape2;
};
#endif

View File

@ -4,9 +4,8 @@
using namespace std;
Intersect::Intersect(refptr<Shape> shape1, refptr<Shape> shape2)
: BoolShape(shape1, shape2)
{
m_shape1 = shape1;
m_shape2 = shape2;
}
Shape::IntersectionList Intersect::intersect(refptr<Shape> _this, const Ray & ray)

View File

@ -2,17 +2,13 @@
#ifndef INTERSECT_H
#define INTERSECT_H INTERSECT_H
#include "Shape.h"
#include "BoolShape.h"
class Intersect : public Shape
class Intersect : public BoolShape
{
public:
Intersect(refptr<Shape> shape1, refptr<Shape> shape2);
IntersectionList intersect(refptr<Shape> _this, const Ray & ray);
protected:
refptr<Shape> m_shape1;
refptr<Shape> m_shape2;
};
#endif

View File

@ -22,6 +22,11 @@ Shape::~Shape()
{
}
void Shape::setMaterial(refptr<Material> material)
{
m_material = material;
}
class BoolIntersectionComparator
: public std::binary_function<Shape::BoolIntersection,
Shape::BoolIntersection,

View File

@ -109,7 +109,7 @@ class Shape
}
Transform & getTransform() { return m_transform; }
void setMaterial(refptr<Material> material) { m_material = material; }
virtual void setMaterial(refptr<Material> material);
refptr<Material> getMaterial() const { return m_material; }
protected:
@ -118,13 +118,6 @@ class Shape
refptr<Material> m_material;
};
#include "Box.h"
#include "Cyl.h"
#include "Intersect.h"
#include "Plane.h"
#include "Sphere.h"
#include "Subtract.h"
#include "Union.h"
#endif

View File

@ -4,9 +4,8 @@
using namespace std;
Subtract::Subtract(refptr<Shape> shape1, refptr<Shape> shape2)
: BoolShape(shape1, shape2)
{
m_shape1 = shape1;
m_shape2 = shape2;
}
Shape::IntersectionList Subtract::intersect(refptr<Shape> _this, const Ray & ray)

View File

@ -2,17 +2,13 @@
#ifndef SUBTRACT_H
#define SUBTRACT_H SUBTRACT_H
#include "Shape.h"
#include "BoolShape.h"
class Subtract : public Shape
class Subtract : public BoolShape
{
public:
Subtract(refptr<Shape> shape1, refptr<Shape> shape2);
IntersectionList intersect(refptr<Shape> _this, const Ray & ray);
protected:
refptr<Shape> m_shape1;
refptr<Shape> m_shape2;
};
#endif

View File

@ -4,9 +4,8 @@
using namespace std;
Union::Union(refptr<Shape> shape1, refptr<Shape> shape2)
: BoolShape(shape1, shape2)
{
m_shape1 = shape1;
m_shape2 = shape2;
}
Shape::IntersectionList Union::intersect(refptr<Shape> _this, const Ray & ray)

View File

@ -2,17 +2,13 @@
#ifndef UNION_H
#define UNION_H UNION_H
#include "Shape.h"
#include "BoolShape.h"
class Union : public Shape
class Union : public BoolShape
{
public:
Union(refptr<Shape> shape1, refptr<Shape> shape2);
IntersectionList intersect(refptr<Shape> _this, const Ray & ray);
protected:
refptr<Shape> m_shape1;
refptr<Shape> m_shape2;
};
#endif

9
shapes/shapes.h Normal file
View File

@ -0,0 +1,9 @@
#include "BoolShape.h"
#include "Box.h"
#include "Cyl.h"
#include "Intersect.h"
#include "Plane.h"
#include "Sphere.h"
#include "Subtract.h"
#include "Union.h"