16 friend class boost::serialization::access;
17 template <
typename Archive>
18 void serialize(Archive& ar,
const unsigned int version)
20 boost::serialization::void_cast_register<Triangle, Primitive>();
21 ar & boost::serialization::base_object<Primitive>(*this);
35 glm::dvec3
e1, e2, v0;
80 friend std::ostream& operator<<(std::ostream& out,
Triangle* t);
107 const glm::dvec3& rayOrigin,
108 const glm::dvec3& rayDir,
109 const glm::dvec3& intersectionPoint
115 const glm::dvec3& rayOrigin,
116 const glm::dvec3& rayDir
122 const glm::dvec3& rayOrigin,
123 const glm::dvec3& rayDir
130 const glm::dvec3& v1,
183 const glm::dvec3& v1,
glm::dvec3 getFaceNormal()
Obtain triangle face normal vector.
Definition: Triangle.cpp:56
std::vector< double > getRayIntersection(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
Definition: Triangle.cpp:85
void setAllVertexNormalsFromFace()
Set all triangle vertices normals to the normal vector of triangle face.
Definition: Triangle.cpp:225
double calcArea3D()
Compute the 3D area of the triangle.
Definition: Triangle.cpp:238
glm::dvec3 e1
Precomputed vertex operations to speed-up ray intersection.
Definition: Triangle.h:35
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:77
glm::dvec3 faceNormal
Triangle face normal vector.
Definition: Triangle.h:31
Triangle(Vertex v0, Vertex v1, Vertex v2)
Triangle constructor.
Definition: Triangle.cpp:19
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:73
glm::dvec3 getCentroid() override
Definition: Triangle.cpp:52
void setAllVertexColors(Color4f color)
Set color for all triangle vertices.
Definition: Triangle.cpp:219
void buildAABB()
Build the axis aligned bounding box containing the triangle.
Definition: Triangle.cpp:179
Class representing a color with 4 float components: RGBA.
Definition: Color4f.h:6
size_t getNumVertices() override
Definition: Triangle.h:98
double getRayIntersectionDistance(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
Definition: Triangle.cpp:119
double getIncidenceAngle_rad(const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir, const glm::dvec3 &intersectionPoint) override
Definition: Triangle.cpp:64
double calcArea2D()
Compute the 2D area of the triangle.
Definition: Triangle.cpp:231
AABB * getAABB() override
Definition: Triangle.cpp:47
Vertex * getVertices() override
Definition: Triangle.cpp:157
Class representing an Axis Aligned Bounding Box (AABB)
Definition: AABB.h:10
Primitive * clone() override
Definition: Triangle.cpp:26
Class representing triangle primitive.
Definition: Triangle.h:13
void update() override
Definition: Triangle.cpp:161
std::string toString()
Build a string representation of the triangle.
Definition: Triangle.cpp:211
void _clone(Primitive *p) override
Definition: Triangle.cpp:32
AABB * aabb
Axis aligned bounding box containing the triangle.
Definition: Triangle.h:49
double euclideanDistance2D(const glm::dvec3 &v1, const glm::dvec3 &v2)
Compute the 2D euclidean distance (XY) for given vertices.
Definition: Triangle.cpp:245
Vertex verts[3]
The 3 vertices defining the triangle.
Definition: Triangle.h:54
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:20
double eps
Decimal precision threshold for triangle computations.
Definition: Triangle.h:44
Class representing a vertex.
Definition: Vertex.h:14
bool faceNormalSet
Flag to specify if face normal has been setted (true) or not (false)
Definition: Triangle.h:40