Easy to use cross-platform 3D engines for C++ game development?
I want to try my hand at writing a 3D game. However I don't want to start at such a low level of drawing individual triangles and writing my own 3D object loader and so on. I've heard of things like Irrlicht, Crystal Space 3D, and Cafu, but I don't have any experience with any of them. I'm looking for suggestions from people who have experience with these or other engines on which ones are well written, and are easy to get started using, without having to learn a ton of 3D math theory and how GPUs work internally.
ditto, very good thread, don't know why stackexchange doesn't like this kind of questions.
My Opinion (only for open source 3D engines):
- Light 3D engine
- Clean C++ without dependencies and no STL.
- Not very well documented but there are good tutorials.
- Very small so you can customize it easily.
- No OpenGL 3.X driver, Direct X 10.X or 11.X available in the official SDK.
- Very good for mobile development;
- Good community
- Few extensions available
- Big 3D engine
- It uses modern C++ such as STL, exceptions and RTTI
- Good documentation (There are published books).
- Many renderers (OpenGL, DirectX and OpenGL ES...).
- Ogre3D have many extensions as CEGUI or Bullet integration, Tree nodes...
- But more difficult to extend Ogre3D if you want something specifics.
- Big community
- Many extensions
- Crystal space: An old design and difficult to use. After few days, I stopped using this engine.
- Small engine
- Modern design
- Light community
- No extensions
- Small engine with some dependencies
- Modern design with moderns effects as DOF or HDR ...
- OpenGL only
- Light community
- Bullet integration for physics
- You use lua to pilot this engine3D
- For a desktop game (or future commercial game): Ogre3D
- For a first game: Irrlicht
- For mobile development: irrlicht (Ogre3D is too big)
- For sexy effects: Blendelf
To be honest I wouldn't recommend Irrlicht for mobile development. It does too many memory-allocations and offers little-to-no custom memory-allocation implementations. The startup-time due to the nearly 60 000 allocations done at startup is a big issue.
I use Irrlicht on Android and IOS and startup time is not a big issue... Texture loading is far longer than alloc...
@Simon could you explain what you're referring to with "custom memory-allocation implementations"? What is that, and why would you want it?
@Aerovistae Memory allocation requires calls to the operating system, it's a very costly operation. Usualy when creating a game engine, you'd want to do your own memory management, f.e. you'd allocate a big chunk of memory once and then you'd distribute that memory in the program yourself. That way you're only moving pointers around and not calling the kernel each time you want extra memory. It's a fairly advanced topic and requires advanced pointer aritmetic especially if you want some sort of an anti fragmentation mechanism.
So when Simon says he wouldn't recommend it because it doesn't offer custom memory-allocation implementations, really this doesn't apply to a beginner, or even to most intermediate developers?
@Aerovistae He was talking about development for mobile platforms, embeded systems have their own quirks. If you're making a game for the PC then custom memory management isn't something you should be focusing on if it takes away from the development of the game, probably. Though, as always, it depends what you're making. The tool is there, it's up to you to use it, but don't feel obligated if there's no need to. Best to probably look at the scale of your project, or at whether you're a software engineer more than a game designer.
The obvious initial suggestion is Ogre3D.
Have you had any experience with it? Is it fairly stable, well written, and good for 3D beginners? I can easily google up a list of 3D engines (as you see from my question), I'm looking for more insight into which is a good choice, and why. Thanks.
But Ogre3D isn't an engine. It is a 3d rendering library. You have to either choose an engine that's built on ogre or build your own.
I've had extensive experience with Ogre3d; It's *very* stable and well written, and does a great job of taking care of mundane tasks (scene culling, mesh loading, billboards/particles). Fire is correct in that it's not a Game Engine; but Ogre can be (and often is) incorporated with other libraries to make one. It's a fantastic step above "drawing individual triangles and writing my own 3D object loader", but it is just a rendering library. If that's what you want, it's a great library with an active and supportive community.
+1 For Ogre 3D We have actually used this engine in many of our commercial projects and we are very pleased by it.
Ok, I'm looking for something a little easier to get started with than Ogre3D. Something more of a Game Engine than just a Rendering Library. Thanks for the input though.
@davr If you want a game engine, then you should mention what type of game you are looking to build (as for rendering, I too recommend Ogre3D. It's not hard at all to get started with it + it has a great, helpful community).
@Fire OGRE: Object-oriented Graphics Rendering Engine. It's an engine. It has singletons all over the place. Definitely an engine.
Open Scene Graph is a pretty good, very well designed cross-platform 3D engine. Contrary to Ogre3D, for example, it does not provide "game engine" features, and concentrates on being a very nice abstraction on top of OpenGL.
- It is quite lightweight, and does not force a framework on you: you can use as little or as much of it as you want, and use it through SDL, SFML, wxWidgets, QT...
- It is a great learning experience: as you learn the library, you understand more and more about the underlying OpenGL and the way it has been designed
- Pretty much ready to use: it has loaders for mainstream 3D formats
- Shaders friendly
Have a look at the extensive list of samples.
In terms of game engines:
- Torque3D: Lots of features, but some would consider the code difficult to work with.
- C4 Engine: Inexpensive, excellent author support, but the tools could use a bit of work.
- DIY: Select a set of libraries and glue them together with your game.
Since Ogre3D was suggested, there also exists a light-weight alternative Horde3D.
- The design is sound and will likely outperform Ogre3D for heavy rendering (if it doesn't already)
- C API, making bindings for languages like Python simple and easy to maintain (internal code is C++)
- Requires at least OpenGL 2.0 support
- Smaller community
- Unstable code base (major architectural changes are still occurring)
Irrlicht provides a bit more than Ogre3D, and at the same time is a bit more hands-on (e.g. it doesn't feel like you're just "starting an engine" and watching it run, it feels more like you're the one running commands, as it should be in my opinion).
I think it would be great to start with!
The obvious choice, if Ogre3D is too low level for you, would be NeoAxis: http://www.neoaxisgroup.com/
It's powered by Ogre, but is a complete game development platform.
It's targeting .NET so you can use C#, managed C++, VB.
So go for that. :)
Ogre3D is able to run on a range of mobile devices, like iPhone and Android. So it's not too big.
Don't mistake size for performance.
I am not sure if IrrLicht has an official iPhone support, but Ogre3D does.
If it's on .NET can't you add IronPython to the list of languages? Python is a fabulous scripting language.