viewport and projection...

hi all,
i have a weird problem: i should project a scene on a spherical screen, via a system of projectors and curved mirrors. I should get an hemispherical viewport instead of the normal frustum, but… i dunno if it is possible to render on a deformed buffer.
Any clues? Or links? :slight_smile:

thanks the G.

Hmm, I suppose you’d need deep knowledge of the matrix transformations in the pipeline to do this (if you can do this). I guess one way would be to distort the items such as when they are projected in the hemispherical screen they look alright.
Try searching for “fish-eye” lens effect. That was an effect used in the alien vs. predator games when you viewed through the alien, which was supposed to have a larger view angle. Also, if the system is already built and you can play around with it, you could try increasing the angle in gluPerspective.
Yet another solution would be to tile up the different projectors so you render one viewport in each projector. But then you’d have to synchronize the images. I guess it’s not easy, but the result should be satisfying. Begin by rendering a square, then you could measure any distortions more accuratelly.
I hope I gave you a few ideas to get you started. Good luck!


Yes its quite possible to do this many real-time simulation software packages such as Vega from Multigen Paradigm ( to name one) can do this type of distortion

Multigen provide a module called NLD Non-Linear-Distortion

Elumens provide software that can intergrated so that you can use their projection spheres

Some projectors also can do some of this for you in a post-process as they project etc…

I don’t have any direct links but a google on ‘Non linear distortion’ or ‘spherical projection’ projecttion should throw some hints up

Hope this helps alittle

Vega FAQ/Samples
SceneGraph Forums

hm the only way to do this I can think of atm would be rendering the scene into cubemaps and then using “texgen normalmap” on the hemisphere model (should be fairly high tessalated) while the scene’s cubemap is used as texture.

you will need GL_ARB_texture_cube_map extension to do this.

from your “viewpoint” you would render the scene with 6 cameras using fov 90, looking up,down,north,west…
basically you render a “skybox” of your scene.

the texgen normalmap will use your hemisphere’s normal to lookup texels in the skybox, which should give you a “warped” scene effect as you seem to want it.