Helios++
Helios software for LiDAR simulations
Triangle Class Reference

Class representing triangle primitive. More...

#include <Triangle.h>

Inheritance diagram for Triangle:
Collaboration diagram for Triangle:

Public Member Functions

 Triangle (Vertex v0, Vertex v1, Vertex v2)
 Triangle constructor. More...
 
Primitiveclone () override
 
void _clone (Primitive *p) override
 
AABBgetAABB () override
 
glm::dvec3 getCentroid () override
 
glm::dvec3 getFaceNormal ()
 Obtain triangle face normal vector. More...
 
size_t getNumVertices () override
 
VertexgetVertices () override
 
double getIncidenceAngle_rad (const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir, const glm::dvec3 &intersectionPoint) override
 
std::vector< double > getRayIntersection (const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
 
double getRayIntersectionDistance (const glm::dvec3 &rayOrigin, const glm::dvec3 &rayDir) override
 
double dotProductNaive (const glm::dvec3 &v1, const glm::dvec3 &v3)
 Naive computation of dot product (faster due to the absence of integrity checks)
 
glm::dvec3 crossProductNaive (const glm::dvec3 &v1, const glm::dvec3 &v2)
 Naive computation of cross product (faster due to the absence of integrity checks)
 
void update () override
 
void buildAABB ()
 Build the axis aligned bounding box containing the triangle.
 
std::string toString ()
 Build a string representation of the triangle. More...
 
void setAllVertexColors (Color4f color)
 Set color for all triangle vertices. More...
 
void setAllVertexNormalsFromFace ()
 Set all triangle vertices normals to the normal vector of triangle face.
 
double calcArea2D ()
 Compute the 2D area of the triangle. More...
 
double calcArea3D ()
 Compute the 3D area of the triangle. More...
 
double euclideanDistance2D (const glm::dvec3 &v1, const glm::dvec3 &v2)
 Compute the 2D euclidean distance (XY) for given vertices. More...
 
- Public Member Functions inherited from Primitive
virtual void onFinishLoading (NoiseSource< double > &uniformNoiseSource)
 Method to be triggered once all Primitives have been loaded. More...
 
virtual size_t getNumFullVertices ()
 Obtain the number of vertices returned by the getNumFullVertices function. More...
 
virtual VertexgetFullVertices ()
 Obtain full vertices for the primitive. More...
 
virtual double getGroundZOffset ()
 Offset for ground point z coordinate. More...
 
virtual bool canHandleIntersections ()
 Specify if the primitive can handle intersections or not. More...
 
virtual IntersectionHandlingResult onRayIntersection (NoiseSource< double > &uniformNoiseSource, glm::dvec3 &rayDirection, glm::dvec3 const &insideIntersectionPoint, glm::dvec3 const &outsideIntersectionPoint, double rayIntensity)
 Handle ray intersections. More...
 
virtual void rotate (Rotation &r)
 Performs rotation over primitive. More...
 
virtual void scale (double const factor)
 Scale primitive by given factor. More...
 
virtual void translate (glm::dvec3 const &shift)
 Translate primitive by given shift. More...
 
virtual bool canComputeSigmaWithLadLut ()
 Check if primitive can compute sigma using LadLut or not. More...
 
virtual double computeSigmaWithLadLut (glm::dvec3 const &direction)
 Compute sigma using LadLut. More...
 

Public Attributes

Vertex verts [3]
 The 3 vertices defining the triangle.
 
- Public Attributes inherited from Primitive
std::shared_ptr< ScenePartpart = nullptr
 Shared pointer to the scene part the primitive belongs to. More...
 
std::shared_ptr< Materialmaterial = nullptr
 Shared pointer to the material defining certain properties such as reflectance, specularity, ... More...
 

Private Member Functions

template<typename Archive >
void serialize (Archive &ar, const unsigned int version)
 

Private Attributes

glm::dvec3 faceNormal
 Triangle face normal vector.
 
glm::dvec3 e1
 Precomputed vertex operations to speed-up ray intersection.
 
glm::dvec3 e2
 
glm::dvec3 v0
 
bool faceNormalSet = false
 Flag to specify if face normal has been setted (true) or not (false)
 
double eps = 0.00001
 Decimal precision threshold for triangle computations.
 
AABBaabb = nullptr
 Axis aligned bounding box containing the triangle. More...
 

Friends

class boost::serialization::access
 
std::ostream & operator<< (std::ostream &out, Triangle *t)
 

Detailed Description

Class representing triangle primitive.

Constructor & Destructor Documentation

◆ Triangle()

Triangle::Triangle ( Vertex  v0,
Vertex  v1,
Vertex  v2 
)

Triangle constructor.

Parameters
v0First triangle vertex
v1Second triangle vertex
v2Third triangle vertex
See also
Triangle::verts

Member Function Documentation

◆ _clone()

void Triangle::_clone ( Primitive p)
overridevirtual
See also
Primitive::_clone

Reimplemented from Primitive.

◆ calcArea2D()

double Triangle::calcArea2D ( )

Compute the 2D area of the triangle.

Returns
Triangle 2D area

◆ calcArea3D()

double Triangle::calcArea3D ( )

Compute the 3D area of the triangle.

Returns
Triangle 3D area

◆ clone()

Primitive * Triangle::clone ( )
overridevirtual
See also
Primitive::clone

Implements Primitive.

◆ euclideanDistance2D()

double Triangle::euclideanDistance2D ( const glm::dvec3 &  v1,
const glm::dvec3 &  v2 
)
inline

Compute the 2D euclidean distance (XY) for given vertices.

Parameters
v1First vertex/point
v2Second vertex/point
Returns
Euclidean distance over XY (2D euclidean distance)

◆ getAABB()

AABB * Triangle::getAABB ( )
overridevirtual
See also
Primitive::getAABB

Implements Primitive.

◆ getCentroid()

dvec3 Triangle::getCentroid ( )
overridevirtual
See also
Primitive::getCentroid

Implements Primitive.

◆ getFaceNormal()

dvec3 Triangle::getFaceNormal ( )

Obtain triangle face normal vector.

Returns
Triangle face normal vector
See also
Triangle::faceNormal

◆ getIncidenceAngle_rad()

double Triangle::getIncidenceAngle_rad ( const glm::dvec3 &  rayOrigin,
const glm::dvec3 &  rayDir,
const glm::dvec3 &  intersectionPoint 
)
overridevirtual

◆ getNumVertices()

size_t Triangle::getNumVertices ( )
inlineoverridevirtual
See also
Primitive::getNumVertices

Reimplemented from Primitive.

◆ getRayIntersection()

std::vector< double > Triangle::getRayIntersection ( const glm::dvec3 &  rayOrigin,
const glm::dvec3 &  rayDir 
)
overridevirtual

◆ getRayIntersectionDistance()

double Triangle::getRayIntersectionDistance ( const glm::dvec3 &  rayOrigin,
const glm::dvec3 &  rayDir 
)
overridevirtual

◆ getVertices()

Vertex * Triangle::getVertices ( )
overridevirtual
See also
Primitive::getVertices

Implements Primitive.

◆ setAllVertexColors()

void Triangle::setAllVertexColors ( Color4f  color)

Set color for all triangle vertices.

Parameters
colorColor for all triangel vertices

◆ toString()

string Triangle::toString ( )

Build a string representation of the triangle.

Returns
String representation of the triangle

◆ update()

void Triangle::update ( )
overridevirtual
See also
Primitive::update

Implements Primitive.

Member Data Documentation

◆ aabb

AABB* Triangle::aabb = nullptr
private

Axis aligned bounding box containing the triangle.

See also
AABB

The documentation for this class was generated from the following files: