Scene refraction

Does anyone know how one could render a scene with refracted light. For instance, in an atomic explosion, the sonic wave would fefract light around it, or extreme shifts in temperature like fire from a jet engine will diffract light. I also once saw Metroid Prime in action and noticed when the character shoots, the world around him refracts as the bullet travels.
Can this technique be done using vertex shaders? Would it be easier to render scene to texture in the pbuffer, apply some filter to it and display it? Would you need Snell’s law in the rendering? This is a very neat effect and I was wondering how it can be done.

Have a look here there’s papers/demos/code etc.