Ray casting

From RogueBasin
(Difference between revisions)
Jump to: navigation, search
(Added an initial page for ray casting. Need to fill in some sections.)
 
(How do I implement it?: Advent project page is marked for deletion, link fixed)
 
(12 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
==What is Ray Casting?==
 
==What is Ray Casting?==
  
Ray casting is a method for calculating [[Field of View]] where rays are traced from the center of a source square to a select number of destination squares. Squares are marked as visible as the rays pass through them, and walls will block the rays.
+
Ray casting is a method for calculating [[Field of Vision]] where rays are traced from the center of a source square to a select number of destination squares. Squares are marked as visible as the rays pass through them, and walls will block the rays.
  
 
There are a few ways to decide where rays are to be cast:
 
There are a few ways to decide where rays are to be cast:
  
* Every potential destination -- This method is very slow, but results in a crude approximation of [[Shadow Casting]].
+
* Every potential destination -- This method is very slow, but results in a crude approximation of [[Shadow casting]].
* Every square along the perimeter of the area being checked for [[Field of View]] -- This is faster, but causes an increasing number of artifacts as the radius increases.
+
* Every square along the perimeter of the area being checked for [[Field of Vision]] -- This is faster, but causes an increasing number of artifacts as the radius increases.
 
* A fixed number of rays as regular intervals -- Provides a tweakable knob that trades off between accuracy and speed.
 
* A fixed number of rays as regular intervals -- Provides a tweakable knob that trades off between accuracy and speed.
  
Line 20: Line 20:
  
 
==How do I implement it?==
 
==How do I implement it?==
 +
 +
* [[Ray-Tracing Field-Of-View Demo]]
 +
* [[A Bucket Of LOS]]
 +
* [[LOS by Odd]]
 +
* [[Line of Sight - Tobias Downer]]
 +
* [[Simple and accurate LOS function for BlitzMax]]
 +
* [[eligloscode|Very simple line of sight pseudo-code.]]
 +
* [[Raycasting in python]]
  
 
==What games use it?==
 
==What games use it?==
 +
 +
[[Moria]]
  
 
==What libraries implement it?==
 
==What libraries implement it?==
 +
 +
[[libtcod]] contains an enhanced version of perimeter raycasting with a post-processing step removing most artifacts and making it equivalent to shadowcasting.
 +
 +
[[category:FOV]]

Latest revision as of 13:50, 6 December 2015

Contents

[edit] What is Ray Casting?

Ray casting is a method for calculating Field of Vision where rays are traced from the center of a source square to a select number of destination squares. Squares are marked as visible as the rays pass through them, and walls will block the rays.

There are a few ways to decide where rays are to be cast:

  • Every potential destination -- This method is very slow, but results in a crude approximation of Shadow casting.
  • Every square along the perimeter of the area being checked for Field of Vision -- This is faster, but causes an increasing number of artifacts as the radius increases.
  • A fixed number of rays as regular intervals -- Provides a tweakable knob that trades off between accuracy and speed.

[edit] Advantages

  • Easy to implement
  • Builds intuitively on Line of Sight algorithms.

[edit] Disadvantages

  • Slow compared to other methods. Even when casting only a few rays, squares close to the source will be visited many times.
  • Many artifacts, even in common situations

[edit] How do I implement it?

[edit] What games use it?

Moria

[edit] What libraries implement it?

libtcod contains an enhanced version of perimeter raycasting with a post-processing step removing most artifacts and making it equivalent to shadowcasting.

Personal tools