Technical Details for "Hubble in a bottle!"


Programming language and libraries

"Hubble in a bottle!" is entirely written in C. The program links OpenGL and the GLUT libraries, so that it is possible to write OpenGL objects (like triangles, spheres and maybe spaceships ;-) in front of a panel, where the particles are projected.

OpenGL consistency

The rendering step for particles is implemented separately, without using OpenGL, and can be read from the source code. However, both systems are consistent with each other: OpenGL and "Hubble in a bottle!" project xyz-particles on the same screen's pixel.

Optimizations for the rendering step

The rendering step consists of a "rotation and zoom"-step, followed by a "3d clip on a one cube"-step and a "2d clip on a window plane"-step. The orthogonal projection is done implicitly in the last stage of the computation.

The fact that the whole rendering step is implemented without using OpenGL makes optimizations easier: ST_XForm_SSE() and ST_XForm_3dnow() substitute the normal ST_XForm() routine for the projection of points using the "rotation and zoom"-matrix. For the AMD 3dnow extension, there is a ST_ClipperCube3dnow() routine as well, that speeds up the "3d clip on a cube"-step, too. It is recommended, if you have an Intel or AMD processor, that you recompile the source code with the THREEDNOW (for AMD) or SSE_EXTENSION (for Intel) flags. All flags are located at the beginning of the file startracker.h. Press t on your keyboard to display the frame per seconds rate.

Plot modes

Three different plot modes are available. To change between them, press 'P' on your keyboard.

Maximum density is the default mode. In this mode, the particle with maximum density along the orthogonal projection line gives the color to the screen's pixel.

The Nearest particle plot mode takes the density of the nearest particle along the projection line to assign the color.

The Estimation along line of sight mode mode is useful if the file with densities is missing. Particles along the line of sight are summed up and the sum gives the color for the pixels. This produces some aliasing effects while zooming or rotating. At the moment, this mode works only for the provided Virgo model.

Improved navigation mechanism

Navigating through the model should be easier than using TIPSY. The rotation is done pressing the left mouse button so that the model spins accordingly. To compute the rotation matrix, quaternions are used internally.

The right mouse button allows you to center the model not only in x and y directions: the model translates according to the point of maximum density (or to the nearest particle according to the plot mode) as well, unlike TIPSY.

Post-processing filters

An edge detection filter has already been implemented. Press 'F' on your keyboard to see it in action. More to follow...

"Hubble in a bottle!" on supercomputers

Recompiling the code with the MPI_SUPPORT flag enabled (in startracker.h) changes the program into a parallel graphics tool. The server program distributes particles to a pool of client processors. Clients are charged with the projection step, while the server merges images together. Read here for more details.

File descriptions

colormap.* Computation of interpolation values for the different color maps

filemgr.* File management routines

filters.* Post-processing filters

hooks.* Empty skeleton routines for OpenGL hooks

Makefile.* Makefile for different architectures (not ready yet)

MPI_support.* Supercomputer routines (MPI library required)

README.html Install instructions

sse*.* Optimized routines for the Intel architecture

startracker.* Library with rendering step

threednow.* 3dnow extensions for the AMD architecture

tipsy.* Tipsy file format reader

trackball.* Trackball routines with quaternions

viewer.* Main program with OpenGL callbacks

windows_makefile Directory with windows makefiles (not ready yet)