#include <Sphere.hpp>
Definition at line 13 of file Sphere.hpp.
◆ Sphere()
| RayTracer::Sphere::Sphere |
( |
const Math::Point3D & | center, |
|
|
double | radius, |
|
|
std::shared_ptr< IMaterial > | material ) |
◆ ~Sphere()
| RayTracer::Sphere::~Sphere |
( |
| ) |
|
|
overridedefault |
◆ getMaterial()
◆ intersect()
Implements RayTracer::IPrimitive.
Definition at line 14 of file Sphere.cpp.
14 {
15 Math::Vector3D oc = ray.origin -
_center;
16 double a = ray.direction.dot(ray.direction);
17 double b = 2.0 * oc.
dot(ray.direction);
19 double discriminant = b * b - 4 * a * c;
20
21 if (discriminant < 0)
22 return false;
23
24 double sqrtDiscriminant = std::sqrt(discriminant);
25 double t0 = (-b - sqrtDiscriminant) / (2.0 * a);
26 double t1 = (-b + sqrtDiscriminant) / (2.0 * a);
27 t = (t0 > 0) ? t0 : ((t1 > 0) ? t1 : -1);
28
29 if (t < 0)
30 return false;
31
32 hitPoint = ray.origin + ray.direction * t;
34 return true;
35}
double dot(const Vector3D &o) const
References _center, _radius, RayTracer::Ray::direction, Math::Vector3D::dot(), and RayTracer::Ray::origin.
◆ rotate()
| void RayTracer::Sphere::rotate |
( |
const Math::Vector3D & | axis, |
|
|
double | angleDegrees ) |
|
overridevirtual |
◆ translate()
◆ _center
◆ _material
| std::shared_ptr<IMaterial> RayTracer::Sphere::_material |
|
private |
◆ _radius
| double RayTracer::Sphere::_radius |
|
private |
The documentation for this class was generated from the following files: