
Zum kompilieren ist nötig: osg und osgAL (beides plattformunabhängig).
osg: Ego Shooter Matrix Manipulator
Dank der osg Architektur ist mein Actor.(h|cpp) einfach zu integrieren; es reicht
osg::Viewer viewer;
Actor *actor = new Actor;
viewer.setCameraManipulator( actor );
viewer.getCamera()->setUpdateCallback( actor );
für eine ordentliche Egoshooter-Steuerung (w,a,s,d + maus + shift), mit integrierten lokalen Koordinatensystemen (Actor::(camera|direction)Transform()).
osgAL: 3D Klang integriert in Open Scene Graph
Schnell zu integrieren ist osgAL, die openAL-Erweiterung von osg. Klänge können in Knoten des Szenengraphen integriert werden, sodass ihr Linkrechtschwenken und die entfernungsabhängige Lautstärke (sogar ein Dopplereffekt!) automatisch erzeugt werden.
Wichtige Einsicht war allerdings: Wenn sehr viele Sounds gleichzeitig abgespielt werden sollen, sollte dies mit osgAL::SoundManager::instance()->pushSoundEvent statt allocateSound() + apply() geschehen, weil osgAL so wartet, bis die nötigen Resourcen frei sind, statt in einem SIGSEGV zu verenden (siehe Unit.cpp).
Open Scene Graph
In der Tat schnell, gut entworfen und unterdokumentiert wie allerorts behauptet.
Allerdings ist mir nicht ganz klar, wie die Objekthierarchie von OSG genutzt werden soll für eigene Objekte: ob es sich also anbietet osg::Group oder osg::Node zu erben oder als Klassenvariable zu halten – meistens hab ich doch von osg::NodeCallback geerbt, sodass der Update mit allen Klassenvariablen umgehen kann.