After my post last week mentioning Speex, Wavpack and Vorbis I had a request for more open source options that may be of interest (thanks @karnakgames) as I hinted at there being quite a lot of them.
This post is going to be a list of interesting libraries that are ones we have used or would consider using, I’ve missed off larger libs such as OGRE / Irrilicht as those include many features covered by our own multi-platform technology. That being said we do occasionally use alternative solutions for things we do support in our tech either as an experiment testing out other interfaces or if feature implementations for a particular project would be too much of a time/cost investment.
I’m sure I’ve forgotten plenty of quality libraries and snippets so please post up in the comment and I’ll integrate those (plus any new ones I think of over the next few weeks!)
- I hopefully covered these three pretty well at a high level in last weeks blog post.
- Theora http://www.theora.org/
- Another great package from the xiph.org group, this time a video codec that has become more and more popular the last few years. The encoders have steadily improved since we last used it and I believe it’s reasonably competitive with more popular codecs now (in terms of quality / bitrate) and has been mentioned in the news quite a bit this last year with the support for it in some browsers using the HTML5 video tag. It still has quite a way to go against h264 but it is a feasible solution depending on your video playback requirements.
- Libsox (LGPL) http://sox.sourceforge.net
- A great set of audio manipulation routines as implemented by the command line tool ‘sox’
AI / Pathfinding
- Recast / Detour http://code.google.com/p/recastnavigation/
- Developed by Mikko Mononen this is a great library featuring a navigation mesh construction system and path-finding toolkit in one!
- OpenSteer http://opensteer.sourceforge.net/
- In the past when we’ve implemented boid systems we wrote our own based off Craig Reynolds work, OpenSteer is a library featuring implementations of the earlier steering behaviours and may be useful as an introduction
- Open Dynamics Engine (ODE) http://ode.org/ode.html
- This was a very popular open source physics engine (and still is though not maintained as much it seems), we’ve worked quite a bit with ODE in the past.
- Bullet http://code.google.com/p/bullet/
- The new leader of open source physics engines with as many features as commercially available solutions and an active community. We’ve not had chance to use it in a project yet but look forward to doing so.
- Box2d http://www.box2d.org/
- My favourite of the 2d physics engines, very simple to integrate into your code and it seems to be pretty solid.
- FreeType2 http://www.freetype.org/index2.html
- The very popular font engine, we’ve not used it in a project but have integrated it into some of our tools for the future. For completely dynamic font usage you could integrate this directly into your game for on the fly font generation.
- Gameswf http://tulrich.com/geekstuff/gameswf.html
- Thatcher Ulrichs public domain library which I believe is still being maintained and has spawned many of the commercial Flash players / Flash based UI tools. This is something we played around with on internal projects many years ago and I’d love to look at again.
- CEGUI http://www.cegui.org.uk/wiki/index.php/Main_Page
- A GUI system which seems to be very popular, I’ve not looked at it in the past as I believe it was previously LGPL which is a bit of a scarier license when working on certain gaming platforms.
- NVIDIA IMGUI http://code.google.com/p/nvidia-widgets/
- An immediate mode GUI from NVIDIA, since reading Jari ‘Sol’ Komppa’s description of IMGUI systems (http://sol.gfxile.net/imgui/) I’ve wanted to try it out and will do soon I hope!
- Berkelium http://www.sirikata.com/wiki/index.php?title=Berkelium
- A BSD licensed wrapper around Googles Chromium allowing off-screen browser rendering in your game/app.
- libRocket http://librocket.com/
- Another interesting UI middleware package (based on HTML/CSS standards) I spotted the other day and will be investigating as an alternative to our existing UI solutions.
- wxWidgets http://www.wxwidgets.org/
- We tend to use wx for tool UI development whenever possible though WPF is certainly very tempting for Windows tool UI development now.
- Lua http://www.lua.org
- One of the most popular scripting languages used for in-game scripting, we’ve used it on a few projects and are still massive fans. Early development was a lot tougher than it is now (having to write our own debugger!) but the community has really grown.
- Squirrel http://www.squirrel-lang.org/
- Similar to lua but perhaps even more C/C++ like.
- V8 http://code.google.com/p/v8/
- Python http://www.python.org/
- A very popular language for tool development however many people also integrate into their games for scripting.
- Mono http://www.mono-project.com/Main_Page
- Cross-platform implementation of C#
- Libcurl http://curl.haxx.se/
- The library beneath command line tool ‘curl’ which supports about everything you can imagine in terms of standard internet protocols – HTTP/FTP in particular and is very useful for interaction with web browsers across your cross-platform games.
- We’ve not really used any open source game networking libs, http://enet.bespin.org/ and http://www.jenkinssoftware.com/raknet/ are the two I always hear about but I’ve done no research on the ins-outs of each of them as we’ve always rolled our own network code.
- OpenCV http://opencv.willowgarage.com
- An incredible library of Computer Vision software.
- Nocturnal http://nocturnal.insomniacgames.com/index.php/Main_Page – from Insomniac Games
- One company gradually sharing useful pieces of code with the wider community
- Open Asset Import Library http://assimp.sourceforge.net/index.html
- I came across this looking for some for a mesh import routine on a prototype project I was working on and flagged it as something to look into integrating with our tools. It seems to support a decent list of file format imports and mesh cleaning.
- John Ratcliff’s Code Suppository http://codesuppository.blogspot.com/
- A range of useful snippets (and larger) varying from convex decomposition to mesh cleaning and micro memory allocators.
- Boost (http://www.boost.org/)
The above list is far from complete and I could have added quite a few more in each section, I’m sure I’ll kick myself over some of the ones I’ve missed.
Next week I’m actually away so I’ll be putting together the post in a few days and scheduling it, any requests are welcome for upcoming posts. We’re getting nearer to talking about our upcoming project releases which is very exciting for us.
Things we’ve been enjoying this week
- I’m not going to link it as I’m not evil. I finally gave it a try and got sucked in!
- Really cool physical (or virtual) constructions, I just liked watching the videos of them
- A bit of information on the current app culture.