Objectives
- Overcome narrow FOV limit in 3D games using panoramic photo techniques
- Implement a front-end to Quake for prototyping panoramic perspectives
- Explore the practicality of different panoramas in gameplay
Abstract
In photography, it is common to overcome the limitations of a camera's Field of View (FOV) by "stitching" multiple photographs together into a panorama. This method was first demonstrated in the context of a game by Fisheye Quake in 1999 [1]. It stitches six views into a single perspective using a fisheye projection.
We introduce an extension to Fisheye Quake called Blinky. It allows you to create two types of Lua scripts for fully customising your perspective:
- Globe scripts define how to capture the image of your environment.
- Lens scripts define how to project the environment image to the screen.
Download
Commands
Bring down the console with the tilde (~) key and you can type the following commands:globe <name> : choose a globe (affects picture quality and render speed) lens <name> : choose a lens (affects the shape of your view) hfov <degrees> : zoom by specifying horizontal FOV vfov <degrees> : zoom by specifying vertical FOV hfit : zoom by fitting your view horizontal bounds in the screen hfit : zoom by fitting your view's vertical bounds in the screen fit : zoom by fitting your whole view in the screen rubix : display colored grid for each rendered view in the globe
Globes
A Globe is the entire image of your environment, composed of smaller images stiched together. Thus, a Globe script describes where to point the camera and how far to zoom when capturing each image plate. The following is an illustration of the packaged globes in Blinky. They show how each image rendered by Quake fits together into a polyhedron net after some cropping.
|
Cube (cube.lua)
|
|
|
Triangular Prism (trism.lua)
|
|
|
Tetrahedron (tetra.lua)
|
|
Lenses
A Lens shapes the panoramic view by mapping the Globe to the final screen image. Thus, a Lens script describes the mathematical projections to make this possible. The following is an illustration of the packaged lenses in Blinky.
|
Panini (panini.lua)
|
![]() |
|
Stereographic (stereographic.lua)
|
![]() |
|
Equirectangular (equirect.lua) |
![]() |
|
Cylinder (equirect.lua) |
![]() |
|
Mercator (mercator.lua) |
![]() |
|
Equidistant Fisheye (fisheye1.lua) |
![]() |
|
Equisolid Fisheye (fisheye2.lua) |
![]() |
|
Vandergrinten (vandergrinten.lua) |
![]() |
|
Fahey (fahey.lua) |
![]() |
|
Hammer (hammer.lua) |
![]() |
|
Polyconic (polyconic.lua) |
![]() |
|
Larrivee (larrivee.lua) |
![]() |
|
Quincuncial (quincuncial.lua) |
![]() |
|
Eckert I (eckert1.lua) |
![]() |
|
Eckert IV (eckert4.lua) |
![]() |
|
Eckert V (eckert5.lua) |
![]() |
|
Wagner VI (wagner6.lua) |
![]() |
|
Winkel I (winkel1.lua) |
![]() |
|
Winkel II (winkel2.lua) |
![]() |
|
Winkel Tripel (winkeltripel.lua) |
![]() |
Acknowledgements
- Aardappel for Fisheye Quake
- Tyrann for TyrQuake
- Peter Weiden for Fisheye Projection illustrations
- Thomas K. Sharpless for Panini Projection
- Gerald Evenden for libproj
- Carlos Furuti for Progonos
- Ashlee for the support
History
Project Start: April 2011Last Update: September 6, 2011

























