1#ifndef EmbreeShapeModel_h
2#define EmbreeShapeModel_h
13#include <embree3/rtcore.h>
19#include "EmbreeTargetShape.h"
20#include "EmbreeTargetManager.h"
21#include "SurfacePoint.h"
51 std::vector<double> lookDirection);
53 const std::vector<double> &observerPos,
54 const bool &backCheck =
true);
56 const std::vector<double> &observerPos,
57 const bool &backCheck =
true);
61 virtual bool isDEM()
const;
78 virtual bool isVisibleFrom(
const std::vector<double> observerPos,
79 const std::vector<double> lookDirection);
Distance measurement, usually in meters.
General purpose Embree ray tracing model.
EmbreeTargetManager * m_targetManager
!< The target body and Embree objects for intersection.
QVector< double > ellipsoidNormal()
Compute the true surface normal vector of an ellipsoid.
virtual bool isVisibleFrom(const std::vector< double > observerPos, const std::vector< double > lookDirection)
Check if the current internalized surface point is visible from an observer position and look directi...
RTCMultiHitRay pointToRay(const SurfacePoint &point) const
Given a surface point, create a ray that goes from the origin of the target to the surface point.
virtual bool intersectSurface(std::vector< double > observerPos, std::vector< double > lookDirection)
This method computes an intercept point given an observer location and look direction using the Embre...
virtual Distance localRadius(const Latitude &lat, const Longitude &lon)
Determine radius at a given lat/lon grid point.
virtual void calculateDefaultNormal()
Return the surface normal of the ellipsoid as the default.
virtual void clearSurfacePoint()
Flag that the ShapeModel does not have a surface point or normal.
void setTolerance(const double &tolerance)
Set the tolerance used when checking if the stored surface point is visible.
QString m_shapeFile
!< Tolerance for checking visibility.
virtual void calculateSurfaceNormal()
Return the surface normal of the ellipsoid.
RTCMultiHitRay latlonToRay(const Latitude &lat, const Longitude &lon) const
Given a latitude and longitude, create a ray that goes from the origin of the target through that lat...
virtual ~EmbreeShapeModel()
Destructor that notifies the target shape manager that the target shape is no longer in use.
void updateIntersection(const RayHitInformation hitInfo)
Update the ShapeModel given an intersection and normal.
double getTolerance() const
Get the tolerance used when checking if the stored surface point is visible.
double m_tolerance
!< This manages EmbreeTargetShapes to allow for sharing of them between EmbreeShapeModels and deletes...
virtual double incidenceAngle(const std::vector< double > &uB)
Computes and returns incidence angle, in degrees, given the illuminator position.
virtual bool isDEM() const
Indicates that this shape model is not from a DEM.
QVector< RayHitInformation > sortHits(RTCMultiHitRay &ray, LinearAlgebra::Vector &observer)
Sort all intersections by a ray based on distance to a point.
virtual void calculateLocalNormal(QVector< double * > cornerNeighborPoints)
Compute the normal for a local region of surface points.
EmbreeShapeModel()
Default constructor sets type to a TIN.
Class for managing the construction and destruction of EmbreeTargetShapes.
Embree Target Shape for planetary bodies.
This class is designed to encapsulate the concept of a Latitude.
boost::numeric::ublas::vector< double > Vector
Definition for an Isis::LinearAlgebra::Vector of doubles.
This class is designed to encapsulate the concept of a Longitude.
Container for cube-like labels.
Define shapes and provide utilities for Isis targets.
This class defines a body-fixed surface point.
This class is used to create and store valid Isis targets.
This is free and unencumbered software released into the public domain.
Struct for capturing multiple intersections when using embree::rtcintersectscene.