I remember seeing a demo, from Quake3 I think, where there was a light source, a creature, and a stain-glass window between them. There was a shadow cast from the edges of the window, and the colours of the window were projected onto the creature too.
I can't find any info on the web though about how to do this. If it was Quake3 then they'd be using shadow volumes (and I believe it was pixel-accurate). I understand that method for shadowing, but can't see how to extend it to include coloured transparent geometry, which should cast a coloured shadow.
Maybe it was a hack, with the window acting like a second light source and projecting a pre-computed texture, extending the volume from the light source, but occluding the original light.
I'd love to know if there's a way to do it for arbitrary transparent geometry though, without requiring an additional render pass for every transparent polygon.
Any thoughts? Anyone know how that Quake 3 demo worked (if indeed it was Quake 3).