4 #include <boost/serialization/base_object.hpp> 5 #include <boost/serialization/shared_ptr.hpp> 10 #include <NoiseSource.h> 11 #include <IntersectionHandlingResult.h> 12 #include <util/HeliosException.h> 23 friend class boost::serialization::access;
24 template<
class Archive>
25 void serialize(Archive &ar,
const unsigned int version) {
37 std::shared_ptr<ScenePart>
part =
nullptr;
71 const glm::dvec3& rayOrigin,
72 const glm::dvec3& rayDir,
73 const glm::dvec3& intersectionPoint
82 const glm::dvec3& rayOrigin,
const glm::dvec3& rayDir) = 0;
91 const glm::dvec3& rayOrigin,
const glm::dvec3& rayDir) = 0;
173 virtual void update() = 0;
211 glm::dvec3 &rayDirection,
212 glm::dvec3
const &insideIntersectionPoint,
213 glm::dvec3
const &outsideIntersectionPoint,
228 virtual void scale(
double const factor);
233 virtual void translate(glm::dvec3
const &shift);
virtual double computeSigmaWithLadLut(glm::dvec3 const &direction)
Compute sigma using LadLut.
Definition: Primitive.h:255
friend std::ostream & operator<<(std::ostream &out, Primitive &p)
Output stream operator << overloading.
Definition: Primitive.cpp:24
Definition: Rotation.h:80
virtual AABB * getAABB()=0
Obtain the axis aligned bounding box containing the primitive.
std::shared_ptr< Material > material
Shared pointer to the material defining certain properties such as reflectance, specularity, ...
Definition: Primitive.h:43
Base class for Helios exceptions.
Definition: HeliosException.h:12
virtual glm::dvec3 getCentroid()=0
Obtain the primitive centroid.
virtual bool canHandleIntersections()
Specify if the primitive can handle intersections or not.
Definition: Primitive.h:188
Output class for intersection handling methods.
Definition: IntersectionHandlingResult.h:13
virtual void update()=0
Necessary primitive updates after modification.
virtual void translate(glm::dvec3 const &shift)
Translate primitive by given shift.
Definition: Primitive.cpp:59
virtual size_t getNumVertices()
Obtain the number of vertices returned by the getVertices function.
Definition: Primitive.h:111
virtual Vertex * getFullVertices()
Obtain full vertices for the primitive.
Definition: Primitive.h:138
Class representing an Axis Aligned Bounding Box (AABB)
Definition: AABB.h:10
virtual std::vector< double > getRayIntersection(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir)=0
Obtain the intersection point between primitive and given ray.
virtual void scale(double const factor)
Scale primitive by given factor.
Definition: Primitive.cpp:50
virtual IntersectionHandlingResult onRayIntersection(NoiseSource< double > &uniformNoiseSource, glm::dvec3 &rayDirection, glm::dvec3 const &insideIntersectionPoint, glm::dvec3 const &outsideIntersectionPoint, double rayIntensity)
Handle ray intersections.
Definition: Primitive.cpp:12
virtual Vertex * getVertices()=0
Obtain basic vertices for the primitive.
std::shared_ptr< ScenePart > part
Shared pointer to the scene part the primitive belongs to.
Definition: Primitive.h:37
virtual void rotate(Rotation &r)
Performs rotation over primitive.
Definition: Primitive.cpp:44
virtual size_t getNumFullVertices()
Obtain the number of vertices returned by the getNumFullVertices function.
Definition: Primitive.h:125
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:20
virtual void onFinishLoading(NoiseSource< double > &uniformNoiseSource)
Method to be triggered once all Primitives have been loaded.
Definition: Primitive.h:103
virtual double getGroundZOffset()
Offset for ground point z coordinate.
Definition: Primitive.h:167
virtual bool canComputeSigmaWithLadLut()
Check if primitive can compute sigma using LadLut or not.
Definition: Primitive.h:243
virtual double getIncidenceAngle_rad(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir, const glm::dvec3 &intersectionPoint)=0
Obtain the incidence angle in radians.
virtual double getRayIntersectionDistance(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir)=0
Obtain the intersection distance between primitive and given ray.
Class representing a vertex.
Definition: Vertex.h:14