I spent several hours looking over PhysX and NxOgre, a wrapper for PhysX to bridge the gap between the two systems. I also experimented with the modelling program plugin for PhysX.
Conclusions so far:
PhysX: Powerful, pretty easy to use, professional quality level. Documentation is wrong in some places but nothing to really kill my productivity. Code documentation is generally sufficient – again while there are holes, it’s not enough to kill my productivity. Overall it’s pretty much pleasant to work with and I’m making good progress. The only thing I don’t like is that it requires its own installer.
NxOgre: Very easy to use if you already know what you’re doing. Otherwise about 70% of the documentation is missing and it’s definitely not clear what to do in these cases. Coding quality is above average relative to other freeware stuff, but still not up to the level I like to work with. In the end, I decided not to go with it. This is for three reasons:
1. Unclear memory management. While it’s clear that NxOgre handles most memory management for you, I don’t feel very comfortable putting new calls all over the place and trusting they were handled correctly. The architecture pretty much requires you do this.
2. Unique name convention for objects. This is similar to what Ogre does, and is one of the biggest annoyances about Ogre. I don’t want to name every damn class I want with a text string, especially not if I have to constantly work to make sure it’s unique.
3. Overhead. The documentation and samples for PhysX are just much more clear and straightforward, with better documentation, and it seems relatively easy to use. I don’t see the point of using NxOgre except to save me time, and without clear documentation it won’t save me much of anything. Plus, if I’m going to use a library it needs to be written at a higher quality level than what I saw or I’m not going to trust that it won’t crash or leak memory somewhere.
Modelling plugin: A buggy terrible mess, with outdated and wrong documentation. It looks like it was written halfway, then abandoned. I’m going to just integrate with the exporter I already have and parse out objects.
Right now I have PhysX integrated with my engine and creating a physics scene. I look forward to seeing how fast I can get the ship flying around.