From: (Paul Heckbert)
Subject: Re: curved or spherical screen
Date: Wed, 12 May 1993 17:10:04 GMT

Bellman Thomas ( wrote:

Does anyone know of any work on curved or spherical displays?

Below are references to some papers on Omnimax film-making by computer.

Yes, Omnimax film is projected onto the inside of a dome, so the theater is something like a planetarium. In terms of optics and computer graphics, the shape of the screen does not necessitate pre-warping or pre-distortion of the images, it is the anamorphic (fish-eye) lens of Omnimax projectors that necessitates the warping.

When you project on a curved screen and view the screen from a point near the projector, the curvature becomes irrelevant; you see the same picture as you if the film were projected onto a flat screen or any other shape screen. (We had this discussion on a year or two ago, didn't we?).

Omnimax film uses a fish-eye lens, however, to give the film more resolution in the center, where people direct their gaze most of the time, and less in the periphery. When Omnimax films are produced conventionally, with a film camera, they are shot through the same fish-eye lens as for projection. When Omnimax films are made by computer, the image must be pre-distorted by the inverse of the fish-eye lens' distortion. Thus, the projection from 3-D to film plane is not perspective, but is a radial warp of perspective:

        theta' = theta
        r' = f(r)

This is very easy to do in a ray tracer, but much harder to do with a z-buffer or scanline algorithm, since it bends lines. The article listed below by Max is the definitive one on computer-generated Omnimax films.

Besides Nelson Max at Lawrence Livermore, another expert on the subject of Omnimax film-making by computer is Dave Martindale, who now works with IMAX Corporation (the people who invented IMAX and OMNIMAX films), outside of Toronto.

I was one of the contributors to the 1984 Omnimax film project, which resulted in the film "The Magic Egg", directed by Eddie Garrick. The film is still shown in some Omnimax theaters, I believe.

I think I've answered some of Mike Stroyan's questions, but perhaps this is not what Bellman Thomas wanted to know.

Paul Heckbert <>
Computer Science Dept., Carnegie Mellon University
5000 Forbes Ave, Pittsburgh PA 15213-3891, USA


technical articles:

%A Nelson L. Max
%T Computer Graphics Distortion for IMAX and OMNIMAX Projection
%B Nicograph '83 Proceedings
%D Dec. 1983
%P 137-159

%A Ned Greene
%A Paul S. Heckbert
%T Creating Raster Omnimax Images from Multiple Perspective Views
Using The Elliptical Weighted Average Filter
%J IEEE Computer Graphics and Applications
%V 6
%N 6
%D June 1986
%P 21-27
%K texture mapping, image warp, antialiasing

%A Charles E. Henderson
%A Agnis Kaugars
%T Satellite Imagery in the Production of an Omnimax Animated Film Sequence
%B Nicograph '83
%D Dec. 1983
%P 127-136

%A M. Katoh
%A S. Yanase
%T Three-Dimensional Omnimax Picture by Computer Graphics:
"We are Born of Stars" (in Japanese)
%J Fujitsu
%V 36
%N 2
%D 1985
%P 141-149

production stories:

%A Paul Heckbert
%T Making the Magic Egg: A Personal Account
%J IEEE Computer Graphics and Applications
%V 6
%N 6
%D June 1986
%P 3-8
%K Omnimax

%A Cal Kirchhof
%T The Making of The Magic Egg
%J The Big Frame
%D Spring 1985
%P 9-12
%K omnimax

%A Patrice M. Wagner
%T Omnimax: Perfecting a Medium for 3-D Digital Animation
%J Computer Graphics World
%D Oct. 1984
%P 10-16

From: (John Wright)
Subject: Re: curved or spherical screen
Date: 14 May 93 23:37:25 GMT
Organization: Hughes Training, Inc.

Tom Bellman writes:

The representation of 3-D objects in 2-D is a well developed area. Does anyone know of any work, past or present on curved or spherical displays?

This type of mapping is done quite often in flight simulators with domes. I have written some code to map an image to a flat screen which then drives a projector for the dome. The projector can be right behind the pilot's head (the trivial case) or offset to an edge of the dome. I have included a derivation of the equations to map a flat screen image generated by ray tracing, forward projection, or whatever, to a dome. There are also models for LADAR (Laser Designation And Ranging) which use a spherical mapping as the sensor moves in units of constant delta angle in azimuth and elevation. Thus the pixels are spherically mapped, not flat screen.

This is a transcription of a set of handwritten notes on warping a flat screen image for proper projection on a dome. The first derivation is for a projector directly behind and above the viewer's position. The second derivation is for an offset left or right. The projector is assumed to be at the dome radius from the viewer's position at the center of the dome. This arrangement is most often used for dome flight simulators with liquid crystal light valve projectors. Note that this has nothing to do with Imax or Omnimax systems, although there may be similarities. It is intended for systems where the projector driver is a flat screen image.

Projector above and behind viewer:

The projector is located at the surface of the dome, behind the eyepoint, at an angle A above the line from the center of the projected dome image to the eyepoint. The center of the projected dome image is at (Rd,0,0) and the eyepoint is at (0,0,0). The x-axis straight in front of the eyepoint, the y-axis is to the left, and the z-axis is straight up.

Picture a flat view screen in front of the viewer with pixels at (Ue,Ve) and a dome screen point at (Xs,Ys,Zs). Assume (Xs,Ys,Zs) projects to (Ue,Ve) then the direction cosine of the vector from eye to (Ue,Ve) is:

        We = (1 + Ue^2 + Ve^2)^0.5

        Ke = 1/We

        Le = Ue/We

        Me = Ve/We

if Rd is the dome radius then

        Xs = Rd*Ke      Ys = Le         Zs = Rd*Me

if (Xp,Yp=0,Zp) is the projector location, then

        Xp = -Rd*cos(A)         Yp = 0          Zp = Rd*sin(A)

the direction cosine from (Xp,Yp,Zp) to (Xs,Ys,Zs) is:

        Wp = [2.0*(1 + Ke*cos(A) =Me*sin(A))]^0.5

        Kp = (Ke + cos(A))/Wp

        Lp = Le/Wp

        Mp = (Me - sin(A))/Wp

To make the projector aim at (Rd,0,0), we rotate the coordinate system x,y,z about the y-axis by an angle A/2. The rotation matrix is:

                | cos(A/2)   0   -sin(A/2) |
        Ry =    |    0       1       0     |
                | sin(A/2)   0    cos(A/2) |

The direction cosine in the new coordinate system is:

        | Kp' |      | Kp |   | Kp*cos(A/2) - Mp*sin(A/2) |
        | Lp' | = Ry | Lp | = |            Lp             |
        | Mp' |      | Mp |   | Kp*sin(A/2) + Mp*cos(A/2) |

Now if we assume a pixel in the projector screen at (Up,Vp) then

        Up = Lp' / Kp'

        Vp = Mp' / Kp'

Solving we get:

        Up = Ue / [(1 + We*cos(A))*cos(A/2) - (Ve - We*sin(A))*sin(A/2)]

        Vp = [(1 + We*cos(A))*sin(A/2) + (Ve - We*sin(A))*cos(A/2)] /
             [(1 + We*cos(A))*cos(A/2) - (Ve - We*sin(A))*sin(A/2)]

Thus, if we have a pixel at location (Ue,Ve) in a perspective view generated from an eyepoint, and we wish to project that view on a dome such that there is no distortion apparent to the viewer at the center of the dome, then each image pixel is transformed by the above two equations to map the pixels to a new screen position (Up,Vp) within the projector. Some splatting may be necessary to fill in holes as not all (Up,Vp) will have a (Ue,Ve) mapped to them. Oversampling will also work to eliminate holes.

In the case of the projector being at some angle B horizontally away from the center plane (i.e. not directly behind the viewer) an additional rotation is needed:

                | cos(B/2)  sin(B/2)  0 |
        Rz =    |-sin(B/2)  cos(B/2)  0 |
                |    0         0      1 |


        | Kp' |         | Kp |
        | Lp' | = Rz Ry | Lp |
        | Mp' |         | Mp |


        Up = Lp' / Kp'    and   Vp = Mp' / Kp'

The rest of the derivation is left as an exercise to the reader.

Other disclaimers: This is a transcript of handwritten notes which may be wrong, poorly transcribed, or otherwise worthless. I did not derive these (my math was never that good) and barely know what's going on. Don't blame me.