Steve Exploring Stuff: February 2010

2010-02-17

Navigation Mesh Generation

My first project is a study of the navigation mesh generation process used by Recast.  It consists of Java code that takes an arbitrary triangle mesh as input and generates meshes that represent the traversable surface of the source mesh.  Lot's of good computational geometry algorithms!

I'm calling it a study because it is way over-documented.  Overviews with visualizations, full javadoc, and lots of code comments with references.  It's got so much documentation that hackers may get irritated.  But the target audience includes novices.  So hackers, deal with it.  There is plenty of undocumented code in the world made just for you.

It's been a long time since I've used so much math in my work.  And forcing yourself to create documentation is a  great way of burning new things into the brain.  I also learned SketchUp and a new content management system in the process.  So lot's of secondary fun for me.

The project is over on a new domain:  CritterAI.org.  Its a place where I'll be posting AI related code.  The NMGen entry point includes links to source, javadoc, etc.

The overview documentation is still in progress.  I'll provide updates in this blog whenever I post a new "chapter" to the overview.

Enjoy and don't eat the broccoli.

The First Post (Why this Blog)

This is me exploring.

I'm a tech type.  Mostly software programming.  Up to this point all of my development projects fell into two categories:  Owned by employers, and tech demo's rarely worth sharing with others.  I've benefited so much from others sharing their work that I'm changing things up a bit.

Starting with my first project, which will be published shortly, I'm going to be using this blog to share stuff I'm working on.  There will be status updates along with posts on what I discover along the way.  Whenever possible I'll share code under the MIT license to allow others to re-use it freely.

You'll see mistakes and corrections.  That is just part of exploring and learning.  Coming from a tools and automation background, I have a very wide area of interest.  So you'll also see a wide variety of content.

While the content will vary a lot, most will have a common wrapper.  The wrapper domain will be "simulations".   Game-like, but not really.  I'm wrapping everything as a simulation because it will give me a great deal of latitude to re-use and refine code.  Here is an example:

Desire: I want to study computational geometry, C++, and voxel graphics.
Project:  Implement a navigation mesh generator in Java, derived form a C++ code base.

Desire: Continue study of computational geometry.  Add graph theory and associated algorithms.
Project:  Implement pathfinding algorithms in a simulated environment, using the output from the navigation mesh project.

Desire: Continue study of C++ and study Java/C++ adapters.
Project:  Using my knowledge of navigation meshes and pathfinding, implement a Java adapter to the C++ code on which the first project was based.

Desire: Study performance constrained networking and web development.
Project: Implement a server-side virtual environment simulator using the previous projects with the presentation layer in a web browser.

And on and on and on.  Just about any domain I can think of to explore can be done by building on a simulated environment.

At the end of the day, I can only hope that these explorations are useful to others.

Be good and don't eat the broccoli.