1 #ifndef RAYMARCHING_MODELS3_H
2 #define RAYMARCHING_MODELS3_H
7 #include <Eigen/Geometry>
32 [[nodiscard]]
virtual double getDist(Eigen::Vector3d
const &p)
const = 0;
63 const std::unique_ptr<SDFObject> _left;
64 const std::unique_ptr<SDFObject> _right;
72 [[nodiscard]] std::pair<double, double>
getSoloDist(
const Eigen::Vector3d &p)
const;
81 : _left(std::move(left)), _right(std::move(right)), _op(op) {}
93 [[nodiscard]]
double getDist(
const Eigen::Vector3d &p)
const override;
100 [[nodiscard]]
color_t getColor(
const Eigen::Vector3d &p)
const override;
129 [[nodiscard]]
virtual Eigen::Vector3d
getPos()
const {
return _pos; };
170 [[nodiscard]]
double getDist(
const Eigen::Vector3d &p)
const override;
176 [[nodiscard]]
double getRadius()
const {
return _radius; }
184 Eigen::Vector3d _bound;
203 [[nodiscard]]
double getDist(
const Eigen::Vector3d &p)
const override;
209 [[nodiscard]]
double getBound()
const {
return _bound.x(); }
237 [[nodiscard]]
double getDist(
const Eigen::Vector3d &p)
const override;
248 std::unique_ptr<SDFObject> _original;
250 Eigen::AngleAxisd _rotation;
251 Eigen::AngleAxisd _reverseRotation;
252 Eigen::Vector3d _translation;
254 void applyZeroRotation();
261 : _original(std::move(object)), _scale(1), _rotation(), _translation(), _reverseRotation() {}
275 void rotate(
double x,
double y,
double z);
289 void scale(
double s) { _scale *= s; }
301 [[nodiscard]]
double getScale()
const {
return _scale; }
307 void translate(
const Eigen::Vector3d &p) { _translation += p; };
326 [[nodiscard]]
double getDist(
const Eigen::Vector3d &p)
const override;
333 [[nodiscard]]
color_t getColor(
const Eigen::Vector3d &p)
const override;
Cube Shape.
Definition: models3.h:182
Cube(Eigen::Vector3d p, double bound, color_t color=BLACK)
Definition: models3.h:191
double getDist(const Eigen::Vector3d &p) const override
Definition: models3.cpp:58
double getBound() const
Definition: models3.h:209
Cylinder Shape.
Definition: models3.h:215
double getDist(const Eigen::Vector3d &p) const override
Definition: models3.cpp:63
~Cylinder() override=default
Cylinder(Eigen::Vector3d p, double h, double r, color_t color=BLACK)
Definition: models3.h:225
Marching Ray implementation.
Definition: algebra.h:14
SDFObject combining two elements.
Definition: models3.h:52
SDFOperation
Available SDFObject combination.
Definition: models3.h:57
color_t getColor(const Eigen::Vector3d &p) const override
Definition: models3.cpp:45
~SDFCombination() override=default
std::pair< double, double > getSoloDist(const Eigen::Vector3d &p) const
Definition: models3.cpp:26
double getDist(const Eigen::Vector3d &p) const override
Definition: models3.cpp:33
SDFCombination(std::unique_ptr< SDFObject > left, std::unique_ptr< SDFObject > right, SDFOperation op)
Definition: models3.h:80
Virtual class describing abstract shapes.
Definition: models3.h:20
virtual color_t getColor(Eigen::Vector3d const &p) const =0
virtual ~SDFObject()=default
Line getReflection(const Line &ray) const
Definition: models3.cpp:11
virtual double getDist(Eigen::Vector3d const &p) const =0
Abstract Shape description.
Definition: models3.h:107
virtual Eigen::Vector3d getPos() const
Definition: models3.h:129
Shape(Eigen::Vector3d p, color_t color=BLACK)
Definition: models3.h:123
color_t _color
Definition: models3.h:110
color_t getColor(const Eigen::Vector3d &p) const override
Definition: models3.h:136
Shape(color_t color=BLACK)
Definition: models3.h:116
Eigen::Vector3d _pos
Definition: models3.h:109
void setColor(color_t color)
Definition: models3.h:142
Sphere Shape.
Definition: models3.h:148
~Sphere() override=default
double getDist(const Eigen::Vector3d &p) const override
Definition: models3.cpp:54
Sphere(Eigen::Vector3d p, double r=0, color_t color=BLACK)
Definition: models3.h:158
double getRadius() const
Definition: models3.h:176
Namespace containing all tools implemented within RayMarching package.
Definition: algebra.h:9
constexpr color_t BLACK
Definition: colors.h:32
3 byte color representation structure
Definition: colors.h:11