Descend

Descend

Overview

Descend is an open source program for drawing 3D surfaces from parametric equations. It uses a custom, very fast language called Misc to calculate the geometry. It also uses OpenGL to render scenes with high quality
shaders.

For more information see descend.mimec.org.

History

The idea of the Descend project and its predecessors dates back to the 1990s when I was at high school and had an Amiga 1200. One day I saw a simple program which drew 3D surfaces based on parametric equations entered by the user. One of my first attempts to create a similar program was called "Monster" and I wrote it for my CS classes in Pascal. It had a lot of bugs and never quite worked but the teacher was impressed anyway :).

Soon after that I started creating a program that could parse expressions and generate machine code for the Motorola 680x0 family of processors. It was my first program written in C and it was actually a compiler. Even though I had no idea about the theory of formal grammar and I invented some custom algorithms for determining operators precedence, the program somehow worked.

Shortly before finishing the high school I bought a PC and just after passing the final exams in May 2000 I started working on a program called Grape3D. While writing it, I was learning both C++ and the MFC framework, so it was also a very big challenge. The program allowed to design complex scenes using a fancy editor with such functions as multi-level undo, search and replace, etc. Just when I started writing the drawing part, I learned about OpenGL and I decided to use it. It took me almost 1,5 years to write Grape3D and it had been the biggest project that I created until WebIssues. The program was great and I enjoyed both writing it and playing with it, but it had some limitations. While studying, I made several attempts to design a new version, but I never made any real progress with it.

In 2004 I decided to take a completely different approach and designed a programming language called Misc, which supported vectors, matrices, arrays and object as built-in types. I kept developing this project for some time and released a few versions which are available until today at sourceforge.net/projects/miscengine/. Unlike Grape3D, the project was quite portable and only dependent on standard C++ libraries.

I made two different attempts to embed the Misc Engine in a program generating three-dimensional graphs which was named Descend. The first idea was that the script written in Misc would control every aspect of the scene, down to the OpenGL API, and interact directly with the user interface. I quickly abandoned this idea, because it was too difficult to write the scripts. The second attempt borrowed some ideas from Grape3D and used Misc to calculate parametric equations, but I also wasn't satisfied with the result. The idea of Descend keept bugging me and I've been returning to it from time to time, but during the following 6 years I spent most of the time on other projects.

In summer 2011 I spend a few nights creating a new prototype of Descend which used JavaScript for calculating equations and had an adaptive surface tessellator. The result was nice, but JS turned out to be much too slow. I decided to revive the idea of Misc, but this time focusing on maximizing the speed at the expense of features. As the results were quite impressive, I continued working on this prototype and finally released the first version in October 2012. There is still a lot to do, so hopefully I will keep releasing new versions from time to time.