Projector reads commands from STDIN describing simple 3D geometry. Using this data renders the screen in a window or into a bitmap. When rendering in a window, projector can report mouse and keyboard events on its STDOUT.

Key featuers:

  • Simple, well documented plain text language
  • Scene with multiple objects
  • Texture support
  • Abitrary camera and light source position and angles
  • Basic lighting model with ambient and diffuse parameters
  • Support for level-of-details
  • Frame rate (render timing)
  • Suitable for creating still images, animation, interactive 3d applications, headless (server side) rendering.
  • Portable: ANSI C89, libsdl1.2, pure software rendering (optional opengl)
  • Small: source code is about 6300 sloc.

Motivation: projector is not the engine that you are going to use for the best selling FPS game of the decade. Instead, projector is designed to be an easy to use tool for simple 3d visualisation, mostly for engineering and programming. Emphasis is on ease of use and convenience, not on beautiful, detailed renders. Projector with its simple text language allows you to use any tool, scripting language, program, text editor to render 3d scenes or even animations easily, without having to worry about long 3d engine setup sequences.

Typical use case is as simple as

./ | projector

but with a loopback pipe it is also possible to implement interactive 3d applications since projector can report user input and events on STDOUT.

Animator is a similar project for 2d drawings.


Projector rendered a helicopter simulation for the 2010 finals of the international programming contest Challenge 24.
(Click to enlarge)


Downloads & contacts


Structural visualisation: scene rendered with a cluster of objects
(Click to enlarge)