Home

> 4D Blocks

> Version 3

  Controls
  Settings
  Examples
  Scene Language
  Kinds of Blocks
  Goals
> History
  Versions

History

Ever since I wrote the 4D Maze Game, I've thought that the maze world was too static, that to really understand 4D you needed to be able to interact with the world. And, what better way to interact with the world than to play with toy blocks? That's how children learn about 3D, so maybe that could be how we learn about 4D as well.

The idea was clear, but there were two big difficulties. First, clipping is hard. (By "clipping" I mean removing the parts of objects that can't be seen because they're obstructed by other objects.) I'd managed to hack something together for the maze game, but it only worked for interior spaces. Second, physics is hard. Think about all the ways that two blocks can collide in 3D; in 4D it's even more complicated. So, because of those difficulties, I didn't do anything.

Recently, though, I got into a discussion with Ben Blohowiak, who was also thinking about 4D, and when I was explaining the blocks idea, I really wanted to have something I could point to and say, like this, only with clipping and physics. Then I realized it wouldn't be hard to write the stupidest possible block simulator, and I went ahead and did it. That was version 1.

Once I had that, the lack of clipping really bothered me, so I did some reading and gave it a lot of thought, and managed to come up with a reasonable way to do it. The key is, it's pretty easy to clip lines against polygons, and since in the end all I'm drawing is lines, that does it. Also I found an ugly but effective way to tell whether one block is in front of another. That was version 2.

I still have no idea how to do real physics, but I think it wouldn't be too hard to do some fake physics and let the blocks slide around and rotate. So, probably that's next!

* * *

In fact, what happened was that I did one simple animation test with a block sliding off to infinity, and then I became obsessed with the idea of making model trains. The whole thing was completely clear right from the start, I just had to sit down and do it. There were some small technical challenges but no conceptual ones.

Once the train coding was mostly done, I started putting together some files with examples, and that opened up a whole 'nother can of worms. It turned out that there were a lot of interesting geometric examples that I could have built even using version 2 (plus the rotate command). So, I spent a bunch of time on that too.

Back when I was working on the maze game, I thought I was starting to have some intuition about 4D, but now from the geometric examples I can see that I still have a long way to go. I do think the idea of having a fixed vertical direction is very promising, though.

Anyway, now all the work seems to have reached a more or less closed and self-consistent state, and I'm not sure what's next. The idea I'm most excited about is adding ramps, bridges, and trestles to the train sets. I know how to do it, but it'll be easier if I wait until I've reworked the graphics engine, which is something else I want to do later on. I guess we'll see what happens.