Senior Design Virtual Reality Project

For our Senior Design Project, back in 2004, we decided to create a VR Libarary (toolkit). It's funny, but for an engineering school, they thought we were making a "Library" in VR. I should have stated we're creating a VR Toolkit or API, or something else.

Sadly the original library was lost due to a harddrive-failure. Perhaps at some point, in the future, I might try to recreate it.

System Specs:

  • Rendering Engine: Dual Pentuim III 1Ghz

  • DataGlove Server: Single Core Pentium III 1Ghz

  • Tracking Server: Single Core Pentium II 333Mhz

Rendering Engine

The Rendering Engine role, is as it's titled... To Render stuff. It has a pair of Nvidia VoodooII graphics cards and each acted as a separate graphics pipe.

DataGlove Server

Said server had was responsible for talking over the serial port (rs232) to an custom-made A2D conversion board, which tied to a hand-made dataglove. It also handled basic gesture-recognition and reported that back to the rendering-enginer.

Usually the returned output was 5 - 8bit values (Thumb, Point, Middle, Ring, Pinky) and 1-string (Fist, Flat, Point, Cup)

The dataglove process had two modes:

  • Fly-mode - Just dump the data out as fast as you can, till told to stop

  • Poll-mode - Return only when asked.

DataGlove

The dataglove controller was built around a 20pin 16C74 Pic MicroChip. We chose that mostly becuase it ran at 20Mhz, had an 8-channel 8-Bit ADC. We used a simple Max232 to convert it to RS232... I decided to get fancy and fabricate a circuit board for the glove. I think I have the whole works laying on a shelf somewhere. Perhaps I'll dust if off and use it for future projects.

Tracking Server

The Tracking server contained an Ascension Technologies SpacePad 6DOF tracking system. We needed to use a Pentium II, becuase we needed an ISA slot for said card. I ended up reusing my openspad-library, which I wrote, in C, when I was back at UIC/EVL. Said library would poll the spacepade, and return a sensor number followed by X,Y,Z,Y,P,R floats. At some point I was entertaining the notion of rewriting the code to use quaternions, but never got around to it.. Mostly becuase I wanted to get senior design overwith. :)

Head Mounted Display

The Head-Mounted-Display (HMD), was a professional-grade Virtual-Research VR4 HMD that I acquired from ebay; for less than $250. I was surprised that (a)How good of a state it was in, when I got it, and (b) That is worked at all.

Now remember, this thing was created back in 1994, so the FOV was about 60 degrees. The Resolution was 240x120 per eye. Sigh

The code itelf:

Most, if not all of the code was written in C (gcc); using OpenGL and Glut. It essentially provided a bunch of wrapper functions for doing basic things in VR. Some of the functions created where:

  • Texture loader -- could load jpg, gif, tif, etc

  • Object loader -- could load obj, and ac3d formats

  • Floating window -- essentially a billboard to display images.

  • Stereoscopic handler -- you could take basic opengl/glut code and use this to render stereo

  • Basic World-loader -- Initiallizer that created a plane/world

  • Skybox render -- Used the Texture loader to surround the world with some textures. (e.g. clouds)

  • Basic Trees -- Using the Texture loader, we created basic trees that could be randomly planted.

  • 6Dof Camera -- Handled the headtracking/viewpoint and movement.

  • Glove-handler -- Would render the glove and place it in space.

  • Basic collision detection -- Used ray-intersection testing with bounding-boxes for simple object-picking.

For the most part, we had a multitiude of these functions working; though some were buggy.


Senior-Design Album

Comments