(I originally posted this on my MSDN blog.)
I’ve been working on a personal project off and on for awhile now. It’s called GenesisEngine and it’s a program that generates and renders a procedurally-generated planet. I can take in the view down at ground level with the terrain generated at ~1-meter precision, or I can zoom all the way out into high orbit and see the entire planet at once. This requires relatively little memory and no storage because the whole landscape is generated on demand via fractal algorithms.
Now that I’ve got it to a decent alpha state where it renders mildly interesting terrain I decided to throw it up on GitHub for public amusement. I don’t have any grand plans for this project; it’s just a little laboratory where I can experiment with new code design ideas or new tools, and in the process maybe build something that looks cool and teaches me more about graphics and other stuff that I’m interested in. It’s already been a useful experience for me because I’ve taken several concepts that I read about, tried them out in GenesisEngine, and incorporated them into my code bases at work.
Along the way I plan to blog about the lessons I learn. I’m certainly not blazing any new trails here; I’m just picking up good ideas from people who are much smarter than me and implementing them in a non-trivial project. I hope my successes and failures, and the source code itself, might be of use to others who want to learn.
The code can be found at at http://github.com/SaintGimp/GenesisEngine. Git is another thing I’ve been learning about thanks to GenesisEngine. It’s well worth the time to explore either Git or Mercurial or both if you’re not already familiar with distributed version control systems. It’s slightly bewildering at first to a Perforce/TFS guy but I’m beginning to see what people are so excited about.
If you want to download and build it you’ll first need to install Visual Studio 2008 (you can use the C# Express Edition if you like) and XNA Game Studio 3.1. Everything else should be included in the repository. You should probably check the README file for additional information.
I want to emphasize a couple of points:
- This is absolutely not a Microsoft sample/demo/guidance project. This is my own work that I’m doing on my own time.
- There are areas of the code that I’m pretty happy with and areas that I know are abominable and need to be reworked. This is not a tutorial or a best-practices showcase. This is just a real-world developer working on real-world code. I suspect the best lessons to be drawn from this project will be not how the code looks at any particular point in time but rather how it grows and evolves over time.
Ok, is that enough caveats, self-deprecations, and disclaimers? Anyway, here are a few screenshots to illustrate what I’ve got so far. There’s no texturing or atmosphere yet so think “ice moon”. The red lines mark the boundaries of the individual terrain patches.
On the ground:
At airplane level: