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 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
for each frame 
    for each spotlight
        calc view matrix from light
        render shadow-casting meshes (white on black) 
        blit result into shadow-map texture
    for each mesh-in-scene
        render as usual
    enable alpha blending and setup blend modes
    for each spotlight
        for each shadow receiver
            render using shadow-map texture for this spotlight
Shadow-mapping isn't perfect, but it is well-suited for demo work...

  • 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

    Image of the Day Gallery



    Copyright 1999-2008 (C) FLIPCODE.COM and/or the original content author(s). All rights reserved.
    Please read our Terms, Conditions, and Privacy information.