Anaglyph Stereo Quake

Warning

Prolonged use of this software may result in some form of visual impairment.

I, Graham Bean, will accept no liability for such damage. You use this

software at your own risk.



Introduction


Anaglyph are stereo images designed to be viewed with red-blue glasses. Anaglyph Quake is a stereo version of glQuake designed to be viewed with red-cyan (or alternatively red-blue or red-green) glasses. The whole point of this is to make the images you see in quake truly three dimensional.


Anaglyph's have generally not been popular in 3D games. This is largely due to hardware restrictions resulting in inappropriate stereo imaging techniques and preferences for 256 colour display modes which used for red-blue stereo viewing resulted in effectively 16 colour graphics.


Many home computers used for games have fast processors and 3D acceleration boards. Although LCD stereo viewing in games is starting to become more wide spread, Anaglyph's have shown no signs of a comeback (not that they were popular to begin with). So I decided to see what would happen if I took a popular game (Quake) and added good (IMHO) Anaglyph support to it. The results (although very limited in hardware compatibility) were better than I expected, so I decided to release this to a wider audience.


Usage


Requirements


This version of glQuake only uses a couple more features than standard glQuake. This means that it will not work with the quake-GL type mini drivers. I can almost guarantee that it will not work with any GL->Direct X mapper in existence.

In fact, the gl function used to separate the colour channels not frequently used, and as a result is probably not supported by most consumer graphics boards that claim open-gl compatibility.


Installation

Once your system is set up for open-gl acceleration (if it isn't already, I can't tell you exactly what to do.). Just copy it into your quake directory, and presto, you are ready to go. Run it, any you will ether get instant gratification, or just a plain image, or your computer will crash. Its just that simple. If it works, then all is well and you should proceeded to the configuration section, in which tuning this to your system is expanded. If it doesn't work, you might want to give up or buy a proper open-gl, however there is a troubleshooting section in this document which might (and that's a tentative might) suggest a solution. For incompatible graphics boards, which will probably be a lot of them, I might devises a software work around .


Configuration

All configuration is performed though console variables. None of them are save out, so if you loose it, just quit and start again. Once your happy with your selections, write them down and add them to autoexec.cfg in your id1 directory.

Stereo Adjustment

st_separation - distance between cameras.

st_separation specify the distance between the two cameras. This value is actually half the actual separation (each camera is moved this distance away from center). The larger this number is, the greater the depth will seem. The default is 2.5, which is the value I use when playing. 0 disables the separation and gives you ordinary glQuake, all be it a bit slower; And negative values are stereo reverse.


If you are having trouble seeing the image, reduce this to one or less,

until you brain figures out that there is meant to be depth within the

image, then start increasing it.


A stereo effect will be noticeable with as little as 0.1 separation (although

the image will still be some what flat). Values of 5 an greater will cause

your head to explode.

st_zeropdist - Distance to zero pallerax

At zero pallerax, the image will appear level with the screen. This option specifies how far in front (in quake world) this is. Things further away than this appear to be within the monitor, things closer appear in front of the monitor (sometimes:)

The default is 20, which is approximately where the end of the gun barrel is. Object Closer than this should appear to come out of the monitor, but for this to happen your brain has to believe that this is actually happening (if you brain is like my brain it probably won't). The min is 4 which is where the camera is (this dose not look good). The Maximum is what ever you like (theoretically it is 4096), however I have found that above 20, my brain doesn't buy in to the effect.

st_fustbal - Fusturm Balance adjustment

Although the views are parallel, the viewing fustrums are adjusted so that the projection surface is aligned. This is because we are looking from two diffrent view points though the same "window".



The default is 1. Which means one times st_separation, which is the correct

value.

Great than one over adjusts, less than one under adjusts, 0 results in

no adjustment (strangely enough) which is just ordinary parallel views

superimposed on each other (this is the viewing set up which should be

used in vr helmets with separate displays centred over each eye)

This adjustment is not practically useful. Small adjustments can be used

to enhance or simulate close up viewing, I.E. you are much closer to the

image than normal.

Colour adjustment

Especially useful for red-blue glasses or red-green glasses. These allow

you to add colour to the image on a per channel basis. Generally you should

add a bit of colour to each channel and more to the colour not included

by your glasses.

Cyan glasses, allow green and blue light through in approx equal portions.

Blue glasses, allow mostly blue, but a reasonable amount of green though.

Green glasses, allow mostly green and very little blue through. It is probably not possible to get good colour viewing with these. Good colour adjustment will counter act ghosting/crosstalk.

This colour adjustment uses a similar method as the poly blend feature in glquake. You have to turn poly blend off, then colour adjustment won't work ether


Technical Issues

Compatibility

This modification to glquake is exclusively done in open-gl, there for it should be just as portable as glQuake. However most consumer 3D hardware do not appear to correctly support glColorMask to separate the channels. I believe that I have employed this function correctly. It works as expected on my TNT2 with detonator 353 and on software only mesa. It would be possible to re implement the image combining using separate buffers and then mixed using a less open-gl demanding technique.

Tested Hardware

The number of machines tested is small, but this might give you some ideas

about the compatibility of the is software


CPU

Video

Software

Performance

Functionally/Notes

Pentium II - 233 Mhz

TNT2 (32meg agp)

Win NT 4.TNT2 Detonators (vers 3.53 )

Excellent ( less than 25% hit)

All features. (Development Machine)

Pentium II - 266 Mhz

Voodoo 2</td>

Mini gl -> glide driver

Good

Doesn't work - no rgb masking

Pentium II - 266

Matrox G200</td>

MGA200 ICD (ver 5.21?)

Bad/Crashed

rgbMasking is defective and un-accelerated. Graphics only semireconisable, alternating green blue stripes through image, newer revs crash

AMD K6 300

Matrox

GL Direct - D3d

~1-2 fps

No rgb mask



GL Direct - Mesa Software only

<1 fps

All features


Matrox G400

?

?

Simular coruption to MGA200 but only in most textures, (ie no the desiplay). You can clearly (most of the time?) see the geometry of the level.


Troubleshooting

Program will not run or output defective

If this version of this document has graphics in it then above this line is a picture of what you should get when everything works properly. Unfortunately there is not a lot you can do if this program doesn't work for you. Here is a couple; of things I suggest you try:


Other Issues

To Do

None of these are high priority for me, however if there is enough interest

I might see what I can do.

Contact Details

The Author of this derived work is Graham Bean ( Grbm@bigfoot.com ). Although this program was derived from the quake source code (available from http://www.idsoftware.com Software ) all questions about this program should direct to me

Licence

This program and the work from which it was derived are subject to the

GNU GENERAL PUBLIC LICENSE, which should be contained in the file GNU.TXT

distributed with this program.