#include <OPC_RayCollider.h>
Protected Attributes | |
Point | mCenterCoeff |
bool | mClosestHit |
Report closest hit only. More... | |
bool | mCulling |
Stab culled faces or not. More... | |
Point | mData |
Point | mData2 |
Point | mDir |
Ray direction (normalized) More... | |
Point | mExtentsCoeff |
Point | mFDir |
fabsf(mDir) More... | |
float | mMaxDist |
Valid segment on the ray. More... | |
udword | mNbIntersections |
Number of valid intersections. More... | |
udword | mNbRayBVTests |
Number of Ray-BV tests. More... | |
udword | mNbRayPrimTests |
Number of Ray-Primitive tests. More... | |
Point | mOrigin |
Ray origin. More... | |
CollisionFace | mStabbedFace |
Current stabbed face. More... | |
CollisionFaces * | mStabbedFaces |
List of stabbed faces. More... | |
Protected Attributes inherited from Collider | |
const BaseModel * | mCurrentModel |
Current model for collision query (owner of touched faces) More... | |
udword | mFlags |
Bit flags. More... | |
const MeshInterface * | mIMesh |
User-defined mesh interface. More... | |
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: - d = distance between P0 and P1 - Origin = P0 - Direction = (P1 - P0) / d = normalized direction vector - A parameter t such as a point P on the line (P0,P1) is P = Origin + t * Direction - t = 0 --> P = P0 - t = d --> P = P1 Then we can define a general "ray" as: struct Ray { Point Origin; Point Direction; }; But it actually maps three different things: - a segment, when 0 <= t <= d - a half-line, when 0 <= t < +infinity, or -infinity < t <= d - a line, when -infinity < t < +infinity 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:
- You can setup "first contact" mode or "all contacts" mode with RayCollider::SetFirstContact(). - In "first contact" mode we return as soon as the ray hits one face. If can be useful e.g. for shadow feelers, where you want to know whether the path to the light is free or not (a boolean answer is enough). - In "all contacts" mode we return all faces hit by the ray.
TEMPORAL COHERENCE:
- You can enable or disable temporal coherence with RayCollider::SetTemporalCoherence(). - It currently only works in "first contact" mode. - If temporal coherence is enabled, the previously hit triangle is cached during the first query. Then, next queries start by colliding the ray against the cached triangle. If they still collide, we return immediately.
CLOSEST HIT:
- You can enable or disable "closest hit" with RayCollider::SetClosestHit(). - It currently only works in "all contacts" mode. - If closest hit is enabled, faces are sorted by distance on-the-fly and the closest one only is reported.
BACKFACE CULLING:
- You can enable or disable backface culling with RayCollider::SetCulling(). - If culling is enabled, ray will not hit back faces (only front faces).
Definition at line 63 of file OPC_RayCollider.h.
RayCollider::RayCollider | ( | ) |
|
virtual |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
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:
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 |
Stats: gets the number of intersection found after a collision query. Can be used for in/out tests.
Definition at line 168 of file OPC_RayCollider.h.
Stats: gets the number of Ray-BV overlap tests after a collision query.
Definition at line 147 of file OPC_RayCollider.h.
Stats: gets the number of Ray-Triangle overlap tests after a collision query.
Definition at line 157 of file OPC_RayCollider.h.
|
protected |
RayCollider::override | ( | Collider | ) | const |
Validates current settings. You should call this method after all the settings and callbacks have been defined for a collider.
Computes a ray-AABB overlap test using the separating axis theorem. Ray is cached within the class.
Definition at line 40 of file OPC_RayAABBOverlap.h.
|
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.
vert0 | [in] triangle vertex |
vert1 | [in] triangle vertex |
vert2 | [in] triangle vertex |
Definition at line 16 of file OPC_RayTriOverlap.h.
|
protected |
Computes a segment-AABB overlap test using the separating axis theorem. Segment is cached within the class.
Definition at line 15 of file OPC_RayAABBOverlap.h.
Settings: enable or disable "closest hit" mode.
flag | [in] true to report closest hit only |
Definition at line 99 of file OPC_RayCollider.h.
Settings: enable or disable backface culling.
flag | [in] true to enable backface culling |
Definition at line 110 of file OPC_RayCollider.h.
|
inline |
Settings: sets the destination array for stabbed faces.
cf | [in] destination array, filled during queries |
Definition at line 136 of file OPC_RayCollider.h.
Settings: sets the higher distance bound.
max_dist | [in] higher distance bound. Default = maximal value, for ray queries (else segment) |
Definition at line 121 of file OPC_RayCollider.h.
|
protected |
Definition at line 198 of file OPC_RayCollider.h.
|
protected |
Report closest hit only.
Definition at line 203 of file OPC_RayCollider.h.
|
protected |
Stab culled faces or not.
Definition at line 205 of file OPC_RayCollider.h.
|
protected |
Definition at line 183 of file OPC_RayCollider.h.
|
protected |
Definition at line 183 of file OPC_RayCollider.h.
|
protected |
Ray direction (normalized)
Definition at line 181 of file OPC_RayCollider.h.
|
protected |
Definition at line 199 of file OPC_RayCollider.h.
|
protected |
fabsf(mDir)
Definition at line 182 of file OPC_RayCollider.h.
|
protected |
Valid segment on the ray.
Definition at line 201 of file OPC_RayCollider.h.
|
protected |
Number of valid intersections.
Definition at line 196 of file OPC_RayCollider.h.
|
protected |
Number of Ray-BV tests.
Definition at line 193 of file OPC_RayCollider.h.
|
protected |
Number of Ray-Primitive tests.
Definition at line 194 of file OPC_RayCollider.h.
|
protected |
Ray origin.
Definition at line 180 of file OPC_RayCollider.h.
|
protected |
Current stabbed face.
Definition at line 185 of file OPC_RayCollider.h.
|
protected |
List of stabbed faces.
Definition at line 190 of file OPC_RayCollider.h.