The NVIDIA demo has source; take a look at OceanSimulator::updateDisplacementMap and ocean_simulator_cs.hlsl to see the code implementation.
The basic idea is that the statistic model given defines the waves directly in the frequency space. That is, it gives the Fourier coefficients. This is the h~(k, t) in Equation 19. Once you know the Fourier coefficients, you can use the inverse FFT to recover the function in the spatial domain. The exp( i*k*x ) is just a combination of sine/cosine written in complex form at some frequency k. So equation 19 is like a "linear combination of sine/cosine waves at different frequencies, where the h~(k, t) denotes "how much" of the sine/cosine wave contributes to the overall function.
I would start be deriving the Fourier series using sine/cosine for 1D function f(x). Then use Euler's formula to write it in complex form. The inverse FFT is basically a finite Fourier series. Then study how to extend it to 2D Fourier series.
Earlier lectures also derive the Fourier series.