Ocean
TracingSphere.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) Meta Platforms, Inc. and affiliates.
3  *
4  * This source code is licensed under the MIT license found in the
5  * LICENSE file in the root directory of this source tree.
6  */
7 
8 #ifndef META_OCEAN_RENDERING_GI_TRACING_SPHERE_H
9 #define META_OCEAN_RENDERING_GI_TRACING_SPHERE_H
10 
14 
15 #include "ocean/math/BoundingBox.h"
17 
19 
20 namespace Ocean
21 {
22 
23 namespace Rendering
24 {
25 
26 namespace GlobalIllumination
27 {
28 
29 /**
30  * This class implements the tracing object for a sphere.
31  * @ingroup renderinggi
32  */
33 class OCEAN_RENDERING_GI_EXPORT TracingSphere : public TracingObject
34 {
35  public:
36 
37  /**
38  * Creates a new tracing object.
39  */
41 
42  /**
43  * Destructs this tracing object.
44  */
45  ~TracingSphere() override;
46 
47  /**
48  * Sets the main characteristics of the sphere by providing the object-world transformation and the radius.
49  * @param objectTransformation The transformation transforming points located in the coordinate system of the spehere to points located in the world coordinate system, must be valid
50  * @param localBoundingSphere The bounding sphere object defining the radius of the sphere, must be valid
51  */
52  void setSphere(const HomogenousMatrix4& objectTransformation, const BoundingSphere& localBoundingSphere);
53 
54  /**
55  * Determines the nearest intersection with between this tracing object and a given 3D ray.
56  * @see TracingObject::findNearestIntersection().
57  */
58  void findNearestIntersection(const Line3& ray, RayIntersection& intersection, const bool frontFace, const Scalar eps, const TracingObject* excludedObject = nullptr) const override;
59 
60  /**
61  * Determines whether this tracing object has an intersection with a provided 3D ray.
62  * @see TracingObject::hasIntersection().
63  */
64  bool hasIntersection(const Line3& ray, const Scalar maximalDistance = Numeric::maxValue(), const TracingObject* excludedObject = nullptr) const override;
65 
66  /**
67  * Determines the amount of light that transmits trough this object in the case e.g., this object is transparent.
68  * @see TracingObject::determineDampingColor().
69  */
70  bool determineDampingColor(const Line3& ray, RGBAColor& color, const Scalar maximalDistance = Numeric::maxValue()) const override;
71 
72  /**
73  * Determines the light (the color) for a specified viewing ray this object does reflect.
74  * @see TracingObject::determineColor().
75  */
76  bool determineColor(const Vector3& viewPosition, const Vector3& viewObjectDirection, const RayIntersection& intersection, const TracingGroup& group, const unsigned int bounces, const TracingObject* excludedObject, const Lighting::LightingModes lightingModes, RGBAColor& color) const override;
77 
78  private:
79 
80  /// The bounding sphere object providing the radius of the sphere.
82 };
83 
84 }
85 
86 }
87 
88 }
89 
90 #endif // META_OCEAN_RENDERING_GI_TRACING_SPHERE_H
This class implements a bounding sphere.
Definition: BoundingSphere.h:23
This class implements an infinite line in 3D space.
Definition: Line3.h:70
static constexpr T maxValue()
Returns the max scalar value.
Definition: Numeric.h:3244
This class implements a color defined by red, green, blue and alpha parameters.
Definition: RGBAColor.h:41
LightingModes
Definition of individual lighting modes.
Definition: Lighting.h:47
This class implements a ray intersection object.
Definition: RayIntersection.h:44
This class implements a group of tracing objects.
Definition: TracingGroup.h:28
This class is the abstract base class for all tracing objects.
Definition: TracingObject.h:39
This class implements the tracing object for a sphere.
Definition: TracingSphere.h:34
~TracingSphere() override
Destructs this tracing object.
bool hasIntersection(const Line3 &ray, const Scalar maximalDistance=Numeric::maxValue(), const TracingObject *excludedObject=nullptr) const override
Determines whether this tracing object has an intersection with a provided 3D ray.
bool determineDampingColor(const Line3 &ray, RGBAColor &color, const Scalar maximalDistance=Numeric::maxValue()) const override
Determines the amount of light that transmits trough this object in the case e.g.,...
void findNearestIntersection(const Line3 &ray, RayIntersection &intersection, const bool frontFace, const Scalar eps, const TracingObject *excludedObject=nullptr) const override
Determines the nearest intersection with between this tracing object and a given 3D ray.
BoundingSphere tracingLocalBoundingSphere
The bounding sphere object providing the radius of the sphere.
Definition: TracingSphere.h:81
bool determineColor(const Vector3 &viewPosition, const Vector3 &viewObjectDirection, const RayIntersection &intersection, const TracingGroup &group, const unsigned int bounces, const TracingObject *excludedObject, const Lighting::LightingModes lightingModes, RGBAColor &color) const override
Determines the light (the color) for a specified viewing ray this object does reflect.
void setSphere(const HomogenousMatrix4 &objectTransformation, const BoundingSphere &localBoundingSphere)
Sets the main characteristics of the sphere by providing the object-world transformation and the radi...
TracingSphere()
Creates a new tracing object.
float Scalar
Definition of a scalar type.
Definition: Math.h:128
The namespace covering the entire Ocean framework.
Definition: Accessor.h:15