Programming Projects -->
Block Engine -->
Shooting A Ray Into the World
Suppose the player shoots a gun in the game.
We need to determine what the gun will hit.
What we need to do is determine
where a ray intersects the geometry of the world.
The way this is done in Block Arena is
with a 3D-version of
Bresenham's line algorithm .
That is, for each axis (x, y, and z),
we step through parallel planes that are each
1 unit away from each other
(blocks are 1 unit in width)
until we find an intersection.
This is a very fast and rhobust technique,
and it has the advantage that very few multiplications
are performed (only additions).
One way to seed up this technique would be to
represent the block world as an oct-tree of blocks,
and we step through the nodes of this tree in
the appropriate mannor.
In small maps, this seedup is not necessary.
Consider now the problem of determining if a ray hits
an object in the world that can move around.
What we can do is mark all the block positions in the
world that intersect the bounding box of the object,
and whenever a ray passes through one of these positions,
an intersection calculation with the object is
In addition to using the ray algorithm to deal with
projectiles, it is used for the computation of shadow maps.