Oh, I’ve just realised that the effect only works when using an Orthogonal camera.
Is this what you were meaning by the glFrustum call?
// in the main draw function
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glOrtho(-10, 10, -10, 10, 0, 100);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 1000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// and then draw the actual geometry.
The texture is correctly projected in screenspace (e.g., remains static as the landscape rotates) but is still distorted by perspective depth.