Here is a method that usually every game engine uses to render planar reflections.
Well Blender has already texture.ImageMirror(), but it works fine unless you need a bigger reflecting surface like a lake or ocean.
My method uses fragment (viewport) coordinates instead of geometry UV map to project reflected image to. It means that the reflecting surface size can be unlimited.
Here are some screenshots of an ocean shader utilizing this method:
reflection and refraction texture size is 512 px:
ocean water/underwater demo v0.95
It is a work in progress, shader code is a big mess so I would not recommend using it for projects.
WASD + mouse, LMB - sungrab
P - exit game (my “Esc” key is dead)
ocean water/underwater demo v0.99 (in the the second video)
only planar reflections setup
All files are for Blender 2.6x only (due some changes in bge.mathutils)
and a blend file of the setup:
other uses of the technique (contains many scenes):
update (june 22, 2013)
water surface demo (v1.1):
changes since 1.0:
• much easier to include in your project
• fixed geometry clipping issue experienced on nvidia cards
• reflection & refraction
• normal map displacement (no real geometry displacement yet)
• water sunlight scattering
• chromatic aberration of refraction
• accurate fresnel term
• multi-frequency waves
• wave choppyness simulation
• bunch of tweakables to control all of this stuff