Isis Developer Reference
Isis::BulletClosestRayCallback Class Reference

Bullet ray tracing callback for closest hit on target surface. More...

#include <BulletClosestRayCallback.h>

Inheritance diagram for Isis::BulletClosestRayCallback:
Inheritance graph
Collaboration diagram for Isis::BulletClosestRayCallback:
Collaboration graph

Public Member Functions

 BulletClosestRayCallback ()
 Default constructor. More...
 
 BulletClosestRayCallback (const BulletClosestRayCallback &result, const btVector3 &point, const btVector3 &normal)
 Construct a callback from another callback, an intersection point, and a surface normal. More...
 
 BulletClosestRayCallback (const btVector3 &observer, const btVector3 &lookdir)
 Construct a callback from a ray start and end. More...
 
 BulletClosestRayCallback (const btVector3 &observer, const btVector3 &lookdir, const btCollisionWorld::RayResultCallback &source, btCollisionWorld::LocalRayResult &rayResult, bool nornmalInWorldSpace)
 This constructor is used to create a single ray hit. More...
 
virtual ~BulletClosestRayCallback ()
 Destory a callback. More...
 
bool isValid () const
 Checks if the callback is valid/has a valid intersection. More...
 
btVector3 observer () const
 Return the beginning of the ray. More...
 
btVector3 lookdir () const
 Return the end of the ray. More...
 
btScalar fraction () const
 Return the intersection hit fraction or fractional distance along the ray of the intersection. More...
 
btVector3 point () const
 Return the intersection point, if one exists. More...
 
btVector3 normal () const
 Return the local surface normal at the intersection, if an intersection exists. More...
 
int triangleIndex () const
 Return the 0-based index of the intersected triangle. More...
 
int partId () const
 Return the Bullet ID of the intersected collision object. More...
 
btScalar distance () const
 Returns the distance from the intersection point to the beginning of the ray. More...
 
btScalar distance (const BulletClosestRayCallback &other) const
 Returns the distance from the intersection point of this callback to the intersection point of another callback. More...
 
btScalar distance (const btVector3 &other) const
 Returns the distance from the intersection point to another point. More...
 
bool operator== (const BulletClosestRayCallback &other) const
 Equality operator to check if this callback is equivalent to another callback. More...
 
bool isVisible (const BulletClosestRayCallback &other, const btScalar tolerance=DBL_MAX) const
 Check if the intersection in this is visible based on another callback. More...
 
const BulletTargetShapebody () const
 @breif Return pointer to target shape More...
 

Protected Member Functions

virtual btScalar addSingleResult (btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace)
 ! The Bullet ID of the intersected collision object. More...
 

Protected Attributes

btVector3 m_point
 
btVector3 m_normal
 ! The intersection point in body fixed (x, y, z) kilometers. More...
 
int m_triangleIndex
 ! The local surface normal at the intersection point in body fixed (x, y, z). More...
 
int m_partId
 ! The 0-based index of the intersected triangle. More...
 

Detailed Description

Bullet ray tracing callback for closest hit on target surface.

Stores the results of a raycast to find the closest intersection to the start of a ray. If no raycast has been preformed, or a raycast was unsuccessful, then the callback will be flagged as invalid.

Author
2017-03-17 Kris Becker

Constructor & Destructor Documentation

◆ BulletClosestRayCallback() [1/4]

Isis::BulletClosestRayCallback::BulletClosestRayCallback ( )

Default constructor.

The ray beginning and end, intersection point, and normal default to the origin. The triangle index and part ID default to -1.

◆ BulletClosestRayCallback() [2/4]

Isis::BulletClosestRayCallback::BulletClosestRayCallback ( const BulletClosestRayCallback result,
const btVector3 &  point,
const btVector3 &  normal 
)

Construct a callback from another callback, an intersection point, and a surface normal.

Parameters
resultThe callback to to construct a copy of. The intersection point and normal will not be copied.
pointThe intersection point to store.
normalThe surface normal to store.

References m_normal, m_point, normal(), and point().

◆ BulletClosestRayCallback() [3/4]

Isis::BulletClosestRayCallback::BulletClosestRayCallback ( const btVector3 &  observer,
const btVector3 &  lookdir 
)

Construct a callback from a ray start and end.

Parameters
observerThe beginning of the ray.
lookdirThe end of the ray.

◆ BulletClosestRayCallback() [4/4]

Isis::BulletClosestRayCallback::BulletClosestRayCallback ( const btVector3 &  observer,
const btVector3 &  lookdir,
const btCollisionWorld::RayResultCallback &  source,
btCollisionWorld::LocalRayResult &  rayResult,
bool  normalInWorldSpace 
)

This constructor is used to create a single ray hit.

This constructor is intended to be used in a multi-ray hit environment such as the BulletAllRayHitsRayCallback object to provide the same features provided in this single hit object.

Author
2017-03-17 Kris Becker
Parameters
observerThe beginning of the ray.
lookdirThe end of the ray.
sourceThe original callback this is being created from.
rayResultThe local intersection result.
normalInWorldSpaceIs the normal in the local result in the local coordinate system or the world coordinate system?

References addSingleResult().

◆ ~BulletClosestRayCallback()

Isis::BulletClosestRayCallback::~BulletClosestRayCallback ( )
virtual

Destory a callback.

Member Function Documentation

◆ addSingleResult()

btScalar Isis::BulletClosestRayCallback::addSingleResult ( btCollisionWorld::LocalRayResult &  rayResult,
bool  normalInWorldSpace 
)
protectedvirtual

! The Bullet ID of the intersected collision object.

Add a local intersection result to this callback during ray casting.

Because this callback only stores the single closest result, this overwrites any currently stored result.

Note
This method is called automatically by btCollisionWorld::rayTest.
Parameters
rayResultThe local intersection result for the ray cast.
normalInWorldSpaceIf the normal stored in the local result is in local coordinates or world coordinates.
Returns
btScalar The hit fraction, fractional distance along the ray, of the intersections

References m_normal, m_partId, m_point, and m_triangleIndex.

Referenced by BulletClosestRayCallback().

◆ body()

const BulletTargetShape * Isis::BulletClosestRayCallback::body ( ) const

@breif Return pointer to target shape

This method assumes the creators have properly set the user pointer in (at least) the btCollisionObject.

Author
2017-03-17 Kris Becker
Returns
const BulletClosestRayCallback::BulletTargetShape*

References isValid().

◆ distance() [1/3]

btScalar Isis::BulletClosestRayCallback::distance ( ) const

Returns the distance from the intersection point to the beginning of the ray.

Returns
btScalar Distance between observer and point in kilometers. If no intersection exists, then DBL_MAX is returned.

References isValid(), observer(), and point().

Referenced by distance(), and isVisible().

◆ distance() [2/3]

btScalar Isis::BulletClosestRayCallback::distance ( const btVector3 &  other) const

Returns the distance from the intersection point to another point.

Parameters
otherThe point to calculate the distance to.
Returns
btScalar Distance between intersection and point in kilometers. If no intersection exists, then DBL_MAX is returned.

References distance(), isValid(), and point().

◆ distance() [3/3]

btScalar Isis::BulletClosestRayCallback::distance ( const BulletClosestRayCallback other) const

Returns the distance from the intersection point of this callback to the intersection point of another callback.

Parameters
otherThe other callback to find the distance to.
Returns
btScalar Distance between the intersection point and the other callback's intersection point in kilometers. If this callback or the other callback does not have an intersection, then DBL_MAX is returned.

References distance(), isValid(), and point().

◆ fraction()

btScalar Isis::BulletClosestRayCallback::fraction ( ) const

Return the intersection hit fraction or fractional distance along the ray of the intersection.

This is where along the ray the intersection was found. If the hit fraction is 0, then the intersection was found at the very beginning of the ray. If the hit fraction is 1, then the intersection was found at the very end of the ray. The intersection point can be calculates as:

(1 - hitFraction) * rayStart + hitFraction * rayEnd

Returns
@btScalar The closest intersection hit fraction.

◆ isValid()

bool Isis::BulletClosestRayCallback::isValid ( ) const

Checks if the callback is valid/has a valid intersection.

Returns
bool If there is a valid intersection.
See also
ClosestRayResultCallback::hasHit()

Referenced by body(), distance(), isVisible(), Isis::BulletShapeModel::isVisibleFrom(), and operator==().

◆ isVisible()

bool Isis::BulletClosestRayCallback::isVisible ( const BulletClosestRayCallback other,
const btScalar  tolerance = DBL_MAX 
) const

Check if the intersection in this is visible based on another callback.

Three things are checked to confirm visibility. First, both callbacks must intersect the same triangle on the same collision object. Second, the angle between this callback's local normal and the vector from the other callback's beginning to this callback's intersection must be less than or equal to 90 degrees. Finally, the distance between the intersections of the two callbacks must be less than the tolerance.

Parameters
otherThe callback for checking visibility. This should represent the observer's look ray.
toleranceThe tolerance for the final check of the distance between intersection points.
Returns
bool If the intersection in this callback is visible.

References distance(), isValid(), partId(), and triangleIndex().

Referenced by Isis::BulletShapeModel::isVisibleFrom().

◆ lookdir()

btVector3 Isis::BulletClosestRayCallback::lookdir ( ) const

Return the end of the ray.

Returns
btVector3 The end of the ray.

◆ normal()

btVector3 Isis::BulletClosestRayCallback::normal ( ) const

Return the local surface normal at the intersection, if an intersection exists.

Returns
btVector3 The local surface normal in body fixed (x, y, z).

References _FILEINFO_, m_normal, and Isis::IException::Programmer.

Referenced by BulletClosestRayCallback(), Isis::BulletShapeModel::isVisibleFrom(), and Isis::BulletShapeModel::setLocalNormalFromIntercept().

◆ observer()

btVector3 Isis::BulletClosestRayCallback::observer ( ) const

Return the beginning of the ray.

Returns
btVector3 The beginning of the ray.

Referenced by distance().

◆ operator==()

bool Isis::BulletClosestRayCallback::operator== ( const BulletClosestRayCallback other) const

Equality operator to check if this callback is equivalent to another callback.

Parameters
otherThe callback to compare with.
Returns
bool If both callbacks are valid and intersected the same triangle on the same collision body.

References isValid(), partId(), and triangleIndex().

◆ partId()

int Isis::BulletClosestRayCallback::partId ( ) const

Return the Bullet ID of the intersected collision object.

Returns
int The Bullet ID of the intersected collision object.

References m_partId.

Referenced by isVisible(), and operator==().

◆ point()

btVector3 Isis::BulletClosestRayCallback::point ( ) const

Return the intersection point, if one exists.

Returns
btVector3 The intersection point in body fixed (x, y, z) kilometers.

References _FILEINFO_, m_point, and Isis::IException::Programmer.

Referenced by BulletClosestRayCallback(), distance(), Isis::BulletShapeModel::isVisibleFrom(), and Isis::BulletShapeModel::localRadius().

◆ triangleIndex()

int Isis::BulletClosestRayCallback::triangleIndex ( ) const

Return the 0-based index of the intersected triangle.

Returns
int The 0-based index of the intersected triangle.

References m_triangleIndex.

Referenced by isVisible(), and operator==().

Member Data Documentation

◆ m_normal

btVector3 Isis::BulletClosestRayCallback::m_normal
protected

! The intersection point in body fixed (x, y, z) kilometers.

Referenced by addSingleResult(), BulletClosestRayCallback(), and normal().

◆ m_partId

int Isis::BulletClosestRayCallback::m_partId
protected

! The 0-based index of the intersected triangle.

Referenced by addSingleResult(), and partId().

◆ m_point

btVector3 Isis::BulletClosestRayCallback::m_point
protected

◆ m_triangleIndex

int Isis::BulletClosestRayCallback::m_triangleIndex
protected

! The local surface normal at the intersection point in body fixed (x, y, z).

Referenced by addSingleResult(), and triangleIndex().


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