Game Development Reference
In-Depth Information
Destroying objects
So far, we've essentially created a starting point for a picking ray. It is not a true
raycast or picking ray until the ray travels forward in space and performs some type
of collision detection. To destroy an object in our scene, we'll need to use our picking
ray to perform a raycast and tell us the first rigid body with which it collides.
Raycasting in Bullet is handled through the btDynamicsWorld object's rayTest()
function. We provide the starting point (as a btVector3 ), the direction ( btVector3 ),
and an object to store the raycast data inside, which should be one of two different
classes that inherit from RayResultCallback . The object could either be:
ClosestRayResultCallback , which gives the closest collision that the ray
detected from the start location
AllHitsRayResultCallback , which gives an array filled with all of the col-
lisions the ray detected
Which object we want to use will depend on whether we want only the closest hit, or
all of them. We will be using ClosestRayResultCallback , which contains useful
data and member functions for the collision point, such as:
hasHit() , which returns a boolean value and tells us if there was a collision
between the ray and any physics object
m_collisionObject , which is the btCollisionObject our ray hit
m_hitPointWorld , which is the coordinate in world space where the ray de-
tected a collision
The Raycast() function in the topic's source code takes a picking ray and an empty
output RayResult structure, uses it to create a ClosestRayResultCallback ,
and then performs a raycast test. If the raycast was successful, the function fills out
the structure and returns true, allowing us to check the success or failure of the
raycast outside of this function.
Search WWH ::

Custom Search