| 
 
  |  |  Submitted by , posted on 26 September 2000
 |  |  
   
 
 
| Image Description, by 
  
 Here's a screenshot from my contest entry for the Lights & Shadows contest here on Flipcode.  I'm uploading it 
later tonight, so hopefully you can download it from www.flipcode.com/contest soon.  I still have work to do,
but I wanted to get it out there and see what folks had to say about it.
 
 The technique that I'm using is shadow-mapping and goes something like this.
 
--during load time (or whenever really)
for each spotlight
    attach shadow casters
    attach shadow receivers
next
 
for each frame 
    for each spotlight
        calc view matrix from light
        render shadow-casting meshes (white on black) 
        blit result into shadow-map texture
    next
    for each mesh-in-scene
        render as usual
    next
    enable alpha blending and setup blend modes
    for each spotlight
        for each shadow receiver
            render using shadow-map texture for this spotlight
        next
    next
next
Shadow-mapping isn't perfect, but it is well-suited for demo work...
 Pro's:
 
      Very clean implementation
      Will work on nearly all recent consumer hardware
      Ideal application of multi-texturing
Con's: 
      Shadow-casting meshes cannot self-shadow, so you have to be careful when picking which objects to use as casters.  However, Mark Kilgard has extended the technique to use depth-mapping to achieve self-shadowing using Nvidia register combiners with OpenGL.  I'm not doing that...yet.  8)
      Shadows are blocky unless you use insanely large shadow maps. -- I use 128x128
      If the hardware doesn't support render-to-texture, then it's much SLOWER!
      Eats fill rate like it's going out of style
      "D3D" and "rendering to textures" aren't friendly with one another
The technique is covered in Game Programming Gems by Mark Deloura, ISBN: 1584500492 --- I highly recommended this book. 
 Hope you like my demo.
 
 Alan Gordie
 alan.gordie@computer.org
 http://gordie.editthispage.com/
 
 
 |  
 
 
 |