Problem building a heat effect using a particle engine (with screenshots)

yes, I draw to a distortion buffer and then use pixel shaders to offset the pixels of the scene by the distortion buffer.

Seems like overkill at first but it’s a good way to avoid discontinuous refractive edges on overlapping distortion particle geometry.

For reference, there is a short section in GPU Gems on this sort of effect. It is section 6.5.2 Heat Shimmer. They basically did what you did. They used a particle system to make the displacement texture then used that result to distort the original.

An ATI screensaver uses a similar effect.

One problem I see with this is that the displacement aught to be proportional to the distance from the hot air to the distant object. Multiplying the displacement vector by the difference between the displacement depth buffer and the image depth buffer for the sceen could be a first approximation of this.