finish geometry class

This commit is contained in:
Shuo Feng 2024-02-13 19:21:29 -05:00
parent f1e412f1d1
commit 2568be1eb8
Signed by: sfeng
GPG key ID: 1E83AE6CD1C037B1

View file

@ -3,14 +3,17 @@
#include <Eigen/Core>
using Eigen::Matrix;
using Eigen::Matrix4f;
using Eigen::Vector3f;
// Abstract class for Geometries
class Geometry {
public:
enum class Type { SPHERE, RECTANGLE };
virtual ~Geometry() = default;
virtual bool intersect() const = 0;
protected:
Geometry(Type type, float ka, float kd, float ks, const Vector3f &ca,
@ -27,4 +30,27 @@ public:
void setTransform(const Matrix4f &);
};
class Sphere : public Geometry {
public:
Sphere(float ka, float kd, float ks, const Vector3f &ca, const Vector3f &cd,
const Vector3f &cs, float pc, float radius, const Vector3f &center)
: Geometry(Type::SPHERE, ka, kd, ks, ca, cd, cs, pc), radius(radius),
center(center) {}
private:
float radius;
Vector3f center;
};
class Rectangle : public Geometry {
public:
Rectangle(float ka, float kd, float ks, const Vector3f &ca, const Vector3f cd,
const Vector3f &cs, float pc, const Matrix<float, 3, 4> &corners)
: Geometry(Type::RECTANGLE, ka, kd, ks, ca, cd, cs, pc),
corners(corners) {}
private:
Matrix<float, 3, 4> corners;
};
#endif // !GEOMETRY_H_