PDA

View Full Version : Warping Rendered Scene?


rwgray
03-23-2010, 08:49 AM
I have a custom Head Mounted Display (HMD). (Stereo = one micro display for each eye.) I need to warp the rendered (stereo) scene to compensate for the optical distortions of the HMD so I can view the scene without distortion.

What is the best way to do this?
Is there some texture mapping I can use, or do I have to write my own rendering functions? Anything in the software that allows for specifying compensation of distortion in the HMD by warping the rendered scene prior to sending to HMD?

Cheers,
Bob Gray

Jeff
03-23-2010, 09:25 AM
Take a look at the vizlens module.

http://www.worldviz.com/vizhelp/VizHelp.htm#Lens_correction.htm

rwgray
03-25-2010, 01:57 PM
But this looks like it is only for pincushion distortion.

I need to specify an "arbitrary" warping. The warping is specifyed by the pixel displacement. Instead for pixel (i, j) going to (i, j) it needs to go to (m, n). I have this correspondence for every pixel in the display. The warping is not symmetrical. Any way to specify this in the vizlens?

Cheers,
Bob Gray

farshizzo
03-25-2010, 02:19 PM
The vizlens module simply creates a post-process shader that modifies the rendered image. If you are familiar with OpenGL shaders, it is very easy to create your own post-process shader. Here is a basic template for your own shader:import viz
import vizpp
viz.go()

viz.add('gallery.ive')

distortionShader = """
uniform sampler2D vizpp_InputTex;
void main()
{
vec2 texCoord = gl_TexCoord[0].st;

//Perform distorion of texCoord

gl_FragColor = texture2D(vizpp_InputTex, texCoord);
}
"""

distortionEffect = vizpp.ShaderEffect(frag=distortionShader)

vizpp.addEffect( distortionEffect )