17 friend class boost::serialization::access;
24 template <
typename Archive>
25 void serialize(Archive &ar,
const unsigned int version) {
26 boost::serialization::void_cast_register<Triangle, Primitive>();
27 ar &boost::serialization::base_object<Primitive>(*
this);
46 glm::dvec3
e1, e2, v0;
90 friend std::ostream &operator<<(std::ostream &out,
Triangle *t);
117 const glm::dvec3 &rayOrigin,
118 const glm::dvec3 &rayDir,
119 const glm::dvec3 &intersectionPoint
125 const glm::dvec3 &rayOrigin,
126 const glm::dvec3 &rayDir
132 const glm::dvec3 &rayOrigin,
133 const glm::dvec3 &rayDir
139 inline double dotProductNaive(
const glm::dvec3 &v1,
const glm::dvec3 &v3);
145 const glm::dvec3 &v1,
194 const glm::dvec3 &v1,
Class representing an Axis Aligned Bounding Box (AABB)
Definition: AABB.h:10
Class representing a color with 4 float components: RGBA.
Definition: Color4f.h:10
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:24
Class representing triangle primitive.
Definition: Triangle.h:13
Vertex verts[3]
The 3 vertices defining the triangle.
Definition: Triangle.h:66
void setAllVertexNormalsFromFace()
Set all triangle vertices normals to the normal vector of triangle face.
Definition: Triangle.cpp:217
void _clone(Primitive *p) override
Definition: Triangle.cpp:31
Triangle(Vertex v0, Vertex v1, Vertex v2)
Triangle constructor.
Definition: Triangle.cpp:18
void serialize(Archive &ar, const unsigned int version)
Serialize a Triangle to a stream of bytes.
Definition: Triangle.h:25
glm::dvec3 faceNormal
Triangle face normal vector.
Definition: Triangle.h:42
std::vector< double > getRayIntersection(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
Definition: Triangle.cpp:96
void setAllVertexColors(Color4f color)
Set color for all triangle vertices.
Definition: Triangle.cpp:211
double getRayIntersectionDistance(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
Definition: Triangle.cpp:122
AABB * aabb
Axis aligned bounding box containing the triangle.
Definition: Triangle.h:60
glm::dvec3 e1
Precomputed vertex operations to speed-up ray intersection.
Definition: Triangle.h:46
double dotProductNaive(const glm::dvec3 &v1, const glm::dvec3 &v3)
Naive computation of dot product (faster due to the absence of integrity checks)
Definition: Triangle.cpp:74
AABB * getAABB() override
Definition: Triangle.cpp:47
void buildAABB()
Build the axis aligned bounding box containing the triangle.
Definition: Triangle.cpp:180
double getIncidenceAngle_rad(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir, const glm::dvec3 &intersectionPoint) override
Definition: Triangle.cpp:65
glm::dvec3 crossProductNaive(const glm::dvec3 &v1, const glm::dvec3 &v2)
Naive computation of cross product (faster due to the absence of integrity checks)
Definition: Triangle.cpp:81
glm::dvec3 getCentroid() override
Definition: Triangle.cpp:53
std::string toString()
Build a string representation of the triangle.
Definition: Triangle.cpp:200
Primitive * clone() override
Definition: Triangle.cpp:25
void update() override
Definition: Triangle.cpp:162
double eps
Decimal precision threshold for triangle computations.
Definition: Triangle.h:55
bool faceNormalSet
Flag to specify if face normal has been setted (true) or not (false)
Definition: Triangle.h:51
double calcArea3D()
Compute the 3D area of the triangle.
Definition: Triangle.cpp:230
size_t getNumVertices() override
Definition: Triangle.h:108
Vertex * getVertices() override
Definition: Triangle.cpp:160
glm::dvec3 getFaceNormal()
Obtain triangle face normal vector.
Definition: Triangle.cpp:57
double euclideanDistance2D(const glm::dvec3 &v1, const glm::dvec3 &v2)
Compute the 2D euclidean distance (XY) for given vertices.
Definition: Triangle.cpp:245
double calcArea2D()
Compute the 2D area of the triangle.
Definition: Triangle.cpp:223
Class representing a vertex.
Definition: Vertex.h:14