Samstag, 22. Dezember 2007

Audiolauf

Mal wieder 3d ... audiolauf (super-stereo!): von der idee zur umsetzung, aber hakt. Aber viel über Open Scene Graph gelernt


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.

Keine Kommentare: