### Monday, April 26, 2004

#### Google knows...

Paul Prescod told me (via email) that I'm "proof that Google doesn't know anything", apparently referring to the sparseness of my website. On the contrary, I think Google knows that I'm a procrastinator...

### Saturday, April 17, 2004

#### What is Regulus?

Regulus is a 3D solid modeller that I'm writing.

Regulus works on **solids**, not on meshes, like many other modellers. It also supports boolean set operations on these solids, so you can do interesting things like drill a hole through a sphere by subtracting a cylinder from it. Or you can create a pretty good simulation of Swiss cheese by subtracting a bunch of spheres from a cube.

It's actually a complete rewrite of my final project from a graphics course I took in school, CS488: Introduction to Computer Graphics. The original version was written in TCL/Tk and C++. It also didn't completely work. Taking Operating Systems in the same term probably wasn't a bright idea.

Anyway, the new version of Regulus is written in C++ and Python. It actually started as 100% Python, not including the 3rd-party modules I'm using, wxPython, NumPy and PyOpenGL. This made it much easier to get things working than if I had started in C++. It also made it pretty easy to profile and refactor the code to optimize the algorithms. Prior to optimization, subtracting a sphere from a cube took about 2 minutes. After optimization it took a few seconds.

Now that the algorithms are optimized, I'm porting the slower bits to C++. I'm using SWIG for now, but I'm thinking about trying out Boost.Python. Once I finish porting the bits to C++ that I want to be ported, I probably won't be using NumPy or PyOpenGL anymore. They're both fine, but almost every place I'm using them happens to be in an inner loop.

Here are some screenshots:

All of these images consist of 4 sub-images: top, front, side and a "3/4". The first image is a cube (red) with various transformed cubes subtracted from it. In Regulus, if a solid is subtracted from another the "cut" surface inherits the surface properties of the solid that made the cut. So you can see that a blue cube and a long thin green rod (a stretched cube) were subtracted from the red cube. The second image is simply a wireframe version of this same scene.

The third image is what happens if you subtract a violet cube from a red cube, and then subtract that resulting shape from a green cube. And no, the lines aren't supposed to be parallel. There's a slight twist to each of the cubes to, err, make it interesting I guess. :-) Once again the fourth image is a wireframe version of the preceding image.

These screenshots are actually a little old. I'll try to put up some screenshots showing some operations on spheres soon.