Glome

From HaskellWiki
Revision as of 03:27, 24 January 2010 by Jsnow (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

About

Glome is a ray tracer written by Jim Snow. Originally it was written in Ocaml, but the more recent versions are written in Haskell.

Glome renders into an OpenGL window, and thus requires HOpenGL, though the libraries GlomeVec and GlomeTrace do not.

If everything works, you should see this image when you run Glome the first time:

Glome-testscene-small.png

(It renders in about 20 seconds on my AMD-64. It does not currently use multiple cores.)

Glome does not have a scene description language of its own (save for a rather rudimentary NFF parser), so the most convenient way to describe a scene is directly in Haskell. One can edit the file TestScene.hs, then re-compile.

News

  • Oct 25, 2009: GlomeVec library released
  • Jan 20, 2010: GlomeTrace library released
  • Jan 22, 2010: New version of GlomeVec to (hopefully) fix GlomeTrace compile * failure

GlomeVec

GlomeVec is the vector library used by Glome. Originally, it was part of Glome, but now it is a separate library.

GlomeVec is yet another vector library. It isn't implemented in any particularly clever way, but it has many useful routines for graphics built-in, like transformation matrices.

GlomeVec is also used by a separate project, IcoGrid

GlomeVec also includes a basic solid texture library. Right now, it has an implementation of perlin noise and a couple of simple textures like stripes.

GlomeTrace

GlomeTrace is a library that provides ray-tracing algorithms and a variety of geometry primitives. Originally, it was part of Glome, but now it is a stand-alone library.

Supported base primitives include: sphere, triangle, cone, cylinder, disc, plane, and box.

Composite primitives (those which are containers for other primitives) include groups, csg differenc and intersection, transformed instances, textured objects, and bounding objects.

In addition, there is an implementation of the BIH acceleration structure, which automatically builds a bounding volume hierarchy around unsorted lists of primitives. This greatly improves the performance for large scenes.

GlomeTrace depends on GlomeVec, but it doesn't have any other unusual dependencies.

Documentation

Features Lacking in Glome

This is a sort of to-do list

  • Antialiasing
  • Refraction
  • Photon mapping
  • PLY file parser
  • Rendering to a file
  • Multithreading
  • Support for portals

Questions

Send any questions to the author: jsnow@cs.pdx.edu In particular, I'd like to know if the test image is failing to render on you platform, or if it is failing to build.

Other Notable Renderers

These are some successful open-source ray tracers.

  • POV-Ray - fairly slow, high-quality renderer with many features. This is the renderer that has had the most influence on the design of Glome.
  • Arauna - high performance renderer used for realtime games, faster than Glome by two or three orders of magnitude.
  • PBRT - topic of an excellent book on ray tracing.

Links