Public Member Functions | Protected Member Functions | Protected Attributes
RayCollider Class Reference

#include <OPC_RayCollider.h>

Inheritance diagram for RayCollider:
Inheritance graph
[legend]

List of all members.

Public Member Functions

bool Collide (const Ray &world_ray, const Model &model, const Matrix4x4 *world=null, udword *cache=null)
bool Collide (const Ray &world_ray, const AABBTree *tree, Container &box_indices)
inline_ udword GetNbIntersections () const
inline_ udword GetNbRayBVTests () const
inline_ udword GetNbRayPrimTests () const
 override (Collider) const char *ValidateSettings()
 RayCollider ()
inline_ void SetClosestHit (bool flag)
inline_ void SetCulling (bool flag)
inline_ void SetDestination (CollisionFaces *cf)
inline_ void SetMaxDist (float max_dist=MAX_FLOAT)
virtual ~RayCollider ()

Protected Member Functions

void _RayStab (const AABBCollisionNode *node)
void _RayStab (const AABBNoLeafNode *node)
void _RayStab (const AABBQuantizedNode *node)
void _RayStab (const AABBQuantizedNoLeafNode *node)
void _RayStab (const AABBTreeNode *node, Container &box_indices)
void _SegmentStab (const AABBCollisionNode *node)
void _SegmentStab (const AABBNoLeafNode *node)
void _SegmentStab (const AABBQuantizedNode *node)
void _SegmentStab (const AABBQuantizedNoLeafNode *node)
void _SegmentStab (const AABBTreeNode *node, Container &box_indices)
BOOL InitQuery (const Ray &world_ray, const Matrix4x4 *world=null, udword *face_id=null)
inline_ BOOL RayAABBOverlap (const Point &center, const Point &extents)
inline_ BOOL RayTriOverlap (const Point &vert0, const Point &vert1, const Point &vert2)
inline_ BOOL SegmentAABBOverlap (const Point &center, const Point &extents)

Protected Attributes

Point mCenterCoeff
bool mClosestHit
 Report closest hit only.
bool mCulling
 Stab culled faces or not.
Point mData
Point mData2
Point mDir
 Ray direction (normalized)
Point mExtentsCoeff
Point mFDir
 fabsf(mDir)
float mMaxDist
 Valid segment on the ray.
udword mNbIntersections
 Number of valid intersections.
udword mNbRayBVTests
 Number of Ray-BV tests.
udword mNbRayPrimTests
 Number of Ray-Primitive tests.
Point mOrigin
 Ray origin.
CollisionFace mStabbedFace
 Current stabbed face.
CollisionFacesmStabbedFaces
 List of stabbed faces.

Detailed Description

Contains a ray-vs-tree collider. This class performs a stabbing query on an AABB tree, i.e. does a ray-mesh collision.

HIGHER DISTANCE BOUND:

If P0 and P1 are two 3D points, let's define:

Then we can define a general "ray" as:

struct Ray { Point Origin; Point Direction; };

But it actually maps three different things:

In Opcode, we support segment queries, which yield half-line queries by setting d = +infinity. We don't support line-queries. If you need them, shift the origin along the ray by an appropriate margin.

In short, the lower bound is always 0, and you can setup the higher bound "d" with RayCollider::SetMaxDist().

Query |segment |half-line |line --------|-------------------|---------------|---------------- Usages |-shadow feelers |-raytracing |- |-sweep tests |-in/out tests |

FIRST CONTACT:

TEMPORAL COHERENCE:

CLOSEST HIT:

BACKFACE CULLING:

Author:
Pierre Terdiman
Version:
1.3
Date:
June, 2, 2001

Definition at line 63 of file OPC_RayCollider.h.


Constructor & Destructor Documentation

virtual RayCollider::~RayCollider ( ) [virtual]

Member Function Documentation

void RayCollider::_RayStab ( const AABBTreeNode node,
Container box_indices 
) [protected]
void RayCollider::_SegmentStab ( const AABBTreeNode node,
Container box_indices 
) [protected]
bool RayCollider::Collide ( const Ray world_ray,
const Model model,
const Matrix4x4 world = null,
udword cache = null 
)

Generic stabbing query for generic OPCODE models. After the call, access the results:

Parameters:
world_ray[in] stabbing ray in world space
model[in] Opcode model to collide with
world[in] model's world matrix, or null
cache[in] a possibly cached face index, or null
Returns:
true if success
Warning:
SCALE NOT SUPPORTED. The matrices must contain rotation & translation parts only.
bool RayCollider::Collide ( const Ray world_ray,
const AABBTree tree,
Container box_indices 
)

Stats: gets the number of intersection found after a collision query. Can be used for in/out tests.

See also:
GetNbRayBVTests()
GetNbRayPrimTests()
Returns:
the number of valid intersections during last query

Definition at line 168 of file OPC_RayCollider.h.

Stats: gets the number of Ray-BV overlap tests after a collision query.

See also:
GetNbRayPrimTests()
GetNbIntersections()
Returns:
the number of Ray-BV tests performed during last query

Definition at line 147 of file OPC_RayCollider.h.

Stats: gets the number of Ray-Triangle overlap tests after a collision query.

See also:
GetNbRayBVTests()
GetNbIntersections()
Returns:
the number of Ray-Triangle tests performed during last query

Definition at line 157 of file OPC_RayCollider.h.

BOOL RayCollider::InitQuery ( const Ray world_ray,
const Matrix4x4 world = null,
udword face_id = null 
) [protected]

Validates current settings. You should call this method after all the settings and callbacks have been defined for a collider.

Returns:
null if everything is ok, else a string describing the problem
inline_ BOOL RayCollider::RayAABBOverlap ( const Point center,
const Point extents 
) [protected]

Computes a ray-AABB overlap test using the separating axis theorem. Ray is cached within the class.

Parameters:
center[in] AABB center
extents[in] AABB extents
Returns:
true on overlap

Definition at line 40 of file OPC_RayAABBOverlap.h.

inline_ BOOL RayCollider::RayTriOverlap ( const Point vert0,
const Point vert1,
const Point vert2 
) [protected]

Computes a ray-triangle intersection test. Original code from Tomas Möller's "Fast Minimum Storage Ray-Triangle Intersection". It's been optimized a bit with integer code, and modified to return a non-intersection if distance from ray origin to triangle is negative.

Parameters:
vert0[in] triangle vertex
vert1[in] triangle vertex
vert2[in] triangle vertex
Returns:
true on overlap. mStabbedFace is filled with relevant info.

Definition at line 16 of file OPC_RayTriOverlap.h.

inline_ BOOL RayCollider::SegmentAABBOverlap ( const Point center,
const Point extents 
) [protected]

Computes a segment-AABB overlap test using the separating axis theorem. Segment is cached within the class.

Parameters:
center[in] AABB center
extents[in] AABB extents
Returns:
true on overlap

Definition at line 15 of file OPC_RayAABBOverlap.h.

inline_ void RayCollider::SetClosestHit ( bool  flag) [inline]

Settings: enable or disable "closest hit" mode.

Parameters:
flag[in] true to report closest hit only
See also:
SetCulling(bool flag)
SetMaxDist(float max_dist)
SetDestination(StabbedFaces* sf)

Definition at line 99 of file OPC_RayCollider.h.

inline_ void RayCollider::SetCulling ( bool  flag) [inline]

Settings: enable or disable backface culling.

Parameters:
flag[in] true to enable backface culling
See also:
SetClosestHit(bool flag)
SetMaxDist(float max_dist)
SetDestination(StabbedFaces* sf)

Definition at line 110 of file OPC_RayCollider.h.

Settings: sets the destination array for stabbed faces.

Parameters:
cf[in] destination array, filled during queries
See also:
SetClosestHit(bool flag)
SetCulling(bool flag)
SetMaxDist(float max_dist)

Definition at line 136 of file OPC_RayCollider.h.

inline_ void RayCollider::SetMaxDist ( float  max_dist = MAX_FLOAT) [inline]

Settings: sets the higher distance bound.

Parameters:
max_dist[in] higher distance bound. Default = maximal value, for ray queries (else segment)
See also:
SetClosestHit(bool flag)
SetCulling(bool flag)
SetDestination(StabbedFaces* sf)

Definition at line 121 of file OPC_RayCollider.h.


Member Data Documentation

Definition at line 198 of file OPC_RayCollider.h.

bool RayCollider::mClosestHit [protected]

Report closest hit only.

Definition at line 203 of file OPC_RayCollider.h.

bool RayCollider::mCulling [protected]

Stab culled faces or not.

Definition at line 205 of file OPC_RayCollider.h.

Definition at line 183 of file OPC_RayCollider.h.

Definition at line 183 of file OPC_RayCollider.h.

Point RayCollider::mDir [protected]

Ray direction (normalized)

Definition at line 181 of file OPC_RayCollider.h.

Definition at line 199 of file OPC_RayCollider.h.

fabsf(mDir)

Definition at line 182 of file OPC_RayCollider.h.

float RayCollider::mMaxDist [protected]

Valid segment on the ray.

Definition at line 201 of file OPC_RayCollider.h.

Number of valid intersections.

Definition at line 196 of file OPC_RayCollider.h.

Number of Ray-BV tests.

Definition at line 193 of file OPC_RayCollider.h.

Number of Ray-Primitive tests.

Definition at line 194 of file OPC_RayCollider.h.

Ray origin.

Definition at line 180 of file OPC_RayCollider.h.

Current stabbed face.

Definition at line 185 of file OPC_RayCollider.h.

List of stabbed faces.

Definition at line 190 of file OPC_RayCollider.h.


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


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Thu Apr 11 2019 03:30:21