nuclear@4: #ifndef BVOL_H_ nuclear@4: #define BVOL_H_ nuclear@4: nuclear@4: #include "vmath.h" nuclear@4: nuclear@4: struct HitPoint { nuclear@4: float t; nuclear@4: Vector3 pos; nuclear@4: }; nuclear@4: nuclear@4: class BVolume { nuclear@4: public: nuclear@4: virtual ~BVolume() {} nuclear@4: nuclear@4: virtual bool intersect(const Ray &ray, HitPoint *hit) const = 0; nuclear@4: }; nuclear@4: nuclear@4: class BSphere : public BVolume { nuclear@4: private: nuclear@4: Vector3 center; nuclear@4: float radius; nuclear@4: nuclear@4: public: nuclear@4: BSphere(); nuclear@4: explicit BSphere(const Vector3 &c, float rad = 1.0); nuclear@4: nuclear@4: void set_center(const Vector3 ¢er); nuclear@4: const Vector3 &get_center() const; nuclear@4: nuclear@4: void set_radius(float rad); nuclear@4: float get_radius() const; nuclear@4: nuclear@4: bool intersect(const Ray &ray, HitPoint *hit) const; nuclear@4: }; nuclear@4: nuclear@4: #endif // BVOL_H_