Last night I had one of those rapid prototyping sprints where everything goes just right. I wanted to scout the terrain for drawing a 3D Druid board using SVG.
The result is this. Yup, Perl 6 did that, with a little help from me.
It was very pleasing to see this image grow step by step. I literally started with a grey rectangle. Then I programmatically massaged the coordinates, adding projections, translations, scalings and rotations until I had what I wanted. Here's the code.
I still feel two things are missing.
Anyway, I've been wanting to do this for a long time, and I'm glad that when I finally sat down to do it, not only was the result quite satisfactory, but also the process of getting there. It's 2009, and I'm using Perl 6 to rapid-prototype 3D board games. Cool!
I added real perspective, too. The small patch required for that is here.
Sorting of pieces is now in, too. The algorithm randomly places a few pieces on the board and then draws them correctly. The patch this time is perhaps not the height of legibility, but it gets the job done with surprisingly little code.
As for hiding surfaces, I'm not really sure at present if it's worth the trouble. But if it turns out to be, I now think I have a pretty good grasp on what can be done. There's a well-defined "directly behind" relation between pieces that can be used to weed out vertical surfaces. But this relation is a function of the viewing angle, becuase it's the rotation through the board's height axis that determines what's behind what.
The little kid in me is always appreciative of the shiny. Nice seeing this