Crystalspace VS. Irrlicht VS. .....

3D Engine Comparison

You can find a lot of informations on lot of engines on this database.

CrystalSpace is a full engine so it's a monolithic bloc that you have to customize for your needs.
Irrlicht too but it's made do do things easy. The counter effect is that it's hard to do specific things.

Now, i think Ogre might be the most general purpose hardware accelerated 3D rendering engine around here. Maybe Horde3D is better suited for specific high quality rendering but nothing that cannot be done with Ogre too.

Done Some 2D Game Design, Now Want To Move To 3D

In my opinion, going with Irrlicht or OGRE is a good idea. It will help you get back in touch with C++ and experiment with 3D without making it too easy. It is a good idea to learn XNA as well and build a few 3D game prototypes there.

Summary: Do both, eventually. Learn OpenGL/DirectX later.

All the best.

Suggestion to which C++ 3D engine is better between Ogre, Irrlicht and OpenSceneGraph

First off, both OpenSceneGraph (OSG for short) and Ogre3D are very well documented, supported, large forum etc... I don't know much about Irrlicht besides it's the newest of them. You probably won't go wrong with either of the first two. Someone mentioned CrystalSpace; I haven't looked at that in years, but it was far behind these guys in features and API.

Domain

If I was deciding, I would want to know what domain I was concentrating in. e.g. Whole earth simulation. Or a sense of what is going to be rendered. Such as: Terrain/earth as seen from air | Inside of a building but with some outside | Something CAD like | Information visualization

I say that, because OpenSceneGraph has a strong influence in the simulation and military setting. Disclosure: that's my field and I use OSG on a daily basis. That said, I've always wanted to try Ogre3D and followed it for years on the sideline; I just haven't got around to it. As such, I can't do a complete compare and contrast. I would argue that due to the respective projects' histories and main users: Ogre3D has a more videogame leaning; OSG a more simulation industry leaning. But, neither is tethered to that arena.

For example, say I had:

A simulation heavy with ragdoll/people: I would go with Ogre3D.

A simulation having to use a terrapage file: Pretty much would have to go OSG.

Crossplatform

I can't speak for the Linux side of Ogre3D. But, the main developer (Robert Osfield) uses Linux/Macs for all his stuff. CMake is what is used to compile the code. Or just use apt-get to try them both out.

Performance

I would wager the both would get good performance given the proper tweaks (again, what is rendered... bsp files, octtrees, high flying sim?). And OS used might matter on them.

Visual Looks

You can't get any engine and think it will look good without having good models/terrain and shaders. There probably is better support for different techniques between the two, but it would have to a specific example to get an accurate comparison.

Scene Management

When it comes to this section, OSG is very clean and intuitive. Traversing the scene, finding nodes, changing states on subgraphs, all very easy to do.

Scripting

You didn't mention this, but I thought I would throw it in. I would go Ogre3D here. OSG requires a 3rdParty or custom plugin. And, Irrlicht doesn't support it at all.


Now that you read my opinion, like you needed another one of those, this site (Devmaster) is great for others looking. Although, it's short on details.

ps - There is something of a hybrid (OSG based): that is Delta3D. It is also well supported and updated. And there is probably an Ogre3D derivative that is more simulation like :).

Irrlicht Differences between device-drop() and device-closeDevice()

To fully close a device in a clean way, you must call closeDevice(), then run() to clear all the late events then drop() to clear the memory.
So basically do the following:

device->closeDevice();
device->run();
device->drop();

Irrlicht : can't call onEvent

I got the same problem, it's because you created it but you don't give it when you create your device: like this, IrrlichtDevice* device = createDevice(driverType,
core::dimension2d<u32>(640, 480), 16, false, false, false, --->&receiver<---);

Choosing a 3D game engine

I also recommend Ogre. Ogre can do this, it provides everything needed in regards of mesh and animation support, but not as a drop-in solution. You have to write lots of code for this to be done.

For our project we implemented something like you do. The main character and any other character can be dressed with different weapons and armor and the visuals of the character avatar change accordingly.

As a start hint for how to go about this: In your modeling tool (Blender, Maya, 3ds max, etc.) you model your avatar and all its clothes you need and rig them to the same skeleton. Then export everything individually to Ogre's mesh format.

At runtime you can then attach the clothing meshes the user chooses to the skeleton instance so that they together form the avatar. This is not hard to do via Ogre-API, but for even easier access to this you can use MeshMagick Ogre extension's meshmerge tool. It has been developed for exactly this purpose.

If you want to change other characteristics like facial features, this is possible too, as Ogre supports vertex pose animations out of the box, so you can prepare pathes for certain characteristics of the face and let the user change the face by sliders or somthing like this. (e.g like in Oblivion)

One thing to be aware regarding Ogre: It is a 3d graphics engine, not a game engine. So you can draw stuff to the screen with it and animate and light and in any way change the visuals, but it doesn't do input or physics or sound. For this you have to use other libs and integrate them. Several pre-bundled game engines based on Ogre are available though.

Cannot add texture to an Irrlicht node

Maybe you did not set any lighting thus the black output.
Try making your node unlightable:

node->setMaterialFlag(EMF_LIGHTING, false);

Drawing 3D triangle over scene in Irrlicht

smgr->drawAll() will clean the whole screen and display your scene. Thus calling it after driver->draw3DTriangle() will erase your triangle. If you invert your render functions order this will work fine. See below:

while(device->run()) {
driver->beginScene();
smgr->drawAll();
driver->setTransform(ETS_WORLD, matrix4());
driver->setMaterial(material);
driver->draw3DTriangle(myTriangle, SColor(0,255,0,0));
driver->endScene();
}


Related Topics



Leave a reply



Submit