nx = m_NoiseData[(int)(iy * 256 + 0.5f) % 256][(int)(ix * 256 + 0.5f) % 256] / 256.0f;
If you are using D3D10 or better, you could use a compute shader to get this kind of information from the GPU without a rewrite (and you can also use it to get height information for other entities like enemies). Not necessarily more efficient, but it spares you the need to port GPU stuff like perlin noise etc.. to the CPU (and it's not like one height query is the bottleneck.. right?)