From fd262554ac0e64e1f4a307eadc850ee7b596322b Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 17 Apr 2003 11:14:25 +0000 Subject: [PATCH] Moved the managing of frame stamp from osgProducer::Viewer into osgProducer::OsgCamaraGroup. Added setting of trackball in osgcameragroup so its starts in the correct place for different models. --- examples/osgcameragroup/osgcameragroup.cpp | 5 +++++ include/osgProducer/OsgCameraGroup | 6 ++++++ include/osgProducer/Viewer | 6 ------ runexamples.bat | 4 ++-- src/osgProducer/OsgCameraGroup.cpp | 16 +++++++++++++++- src/osgProducer/Viewer.cpp | 16 ---------------- 6 files changed, 28 insertions(+), 25 deletions(-) diff --git a/examples/osgcameragroup/osgcameragroup.cpp b/examples/osgcameragroup/osgcameragroup.cpp index fe617b019..11d89a005 100644 --- a/examples/osgcameragroup/osgcameragroup.cpp +++ b/examples/osgcameragroup/osgcameragroup.cpp @@ -146,8 +146,13 @@ int main( int argc, char **argv ) // set the scene to render cg.setSceneData(loadedModel.get()); + + const osg::BoundingSphere& bs = loadedModel->getBound(); + Producer::Trackball tb; tb.setOrientation( Producer::Trackball::Z_UP ); + tb.setDistance(bs.radius()*3.0f); + tb.translate(-bs.center().x(),-bs.center().y(),-bs.center().z()); // create the windows and run the threads. cg.realize(); diff --git a/include/osgProducer/OsgCameraGroup b/include/osgProducer/OsgCameraGroup index 9bb5632ba..40a99a760 100644 --- a/include/osgProducer/OsgCameraGroup +++ b/include/osgProducer/OsgCameraGroup @@ -152,6 +152,8 @@ class OSGPRODUCER_EXPORT OsgCameraGroup : public Producer::CameraGroup const osg::Matrix getViewMatrix() const; + virtual void sync(); + /** Dispatch the cull and draw for each of the Camera's for this frame.*/ virtual void frame(); @@ -180,6 +182,10 @@ class OSGPRODUCER_EXPORT OsgCameraGroup : public Producer::CameraGroup osg::ref_ptr _ds; bool _initialized; + + unsigned int _frameNumber; + osg::Timer _timer; + osg::Timer_t _start_tick; osg::ref_ptr _frameStamp; void _init(); diff --git a/include/osgProducer/Viewer b/include/osgProducer/Viewer index 29186874b..6457141a9 100644 --- a/include/osgProducer/Viewer +++ b/include/osgProducer/Viewer @@ -83,8 +83,6 @@ class OSGPRODUCER_EXPORT Viewer : public OsgCameraGroup, public osgGA::GUIAction virtual bool realize(); - virtual void sync(); - virtual void update(); /** Dispatch the cull and draw for each of the Camera's for this frame.*/ @@ -143,10 +141,6 @@ class OSGPRODUCER_EXPORT Viewer : public OsgCameraGroup, public osgGA::GUIAction bool _done; - unsigned int _frameNumber; - osg::Timer _timer; - osg::Timer_t _start_tick; - osgProducer::KeyboardMouseCallback* _kbmcb; EventHandlerList _eventHandlerList; diff --git a/runexamples.bat b/runexamples.bat index 336db080b..a690e7824 100644 --- a/runexamples.bat +++ b/runexamples.bat @@ -19,8 +19,8 @@ osgwindows glider.osg echo osgviewer --stereo cessna.osg osgviewer --stereo cessna.osg -echo osgviewer cessnafire.osg -osgviewer cessnafire.osg +echo osgcameragroup cessnafire.osg +osgcameragroup cessnafire.osg echo osgviewer spaceship.osg osgviewer spaceship.osg diff --git a/src/osgProducer/OsgCameraGroup.cpp b/src/osgProducer/OsgCameraGroup.cpp index 6422e8997..99a9cf81d 100644 --- a/src/osgProducer/OsgCameraGroup.cpp +++ b/src/osgProducer/OsgCameraGroup.cpp @@ -126,6 +126,10 @@ void OsgCameraGroup::_init() _initialized = false; + // set up the time and frame counter. + _frameNumber = 0; + _start_tick = _timer.tick(); + if (!_frameStamp) _frameStamp = new osg::FrameStamp; // set up the maximum number of graphics contexts, before loading the scene graph @@ -133,6 +137,7 @@ void OsgCameraGroup::_init() osg::DisplaySettings::instance()->setMaxNumberOfGraphicsContexts( getNumberOfCameras() ); _applicationUsage = osg::ApplicationUsage::instance(); + } void OsgCameraGroup::setSceneData( osg::Node *scene ) @@ -404,12 +409,21 @@ const osg::Matrix OsgCameraGroup::getViewMatrix() const return matrix; } +void OsgCameraGroup::sync() +{ + CameraGroup::sync(); + + // set the frame stamp for the new frame. + double time_since_start = _timer.delta_s(_start_tick,_timer.tick()); + _frameStamp->setFrameNumber(_frameNumber++); + _frameStamp->setReferenceTime(time_since_start); +} + void OsgCameraGroup::frame() { osg::Node* node = getTopMostSceneData(); if (node) node->getBound(); CameraGroup::frame(); - _frameStamp->setFrameNumber( _frameStamp->getFrameNumber() + 1 ); } diff --git a/src/osgProducer/Viewer.cpp b/src/osgProducer/Viewer.cpp index 185194321..964915510 100644 --- a/src/osgProducer/Viewer.cpp +++ b/src/osgProducer/Viewer.cpp @@ -125,7 +125,6 @@ private: // Viewer::Viewer(): _done(0), - _frameNumber(0), _kbmcb(0), _recordingAnimationPath(false) { @@ -134,7 +133,6 @@ Viewer::Viewer(): Viewer::Viewer(Producer::CameraConfig *cfg): OsgCameraGroup(cfg), _done(false), - _frameNumber(0), _kbmcb(0), _recordingAnimationPath(false) { @@ -143,7 +141,6 @@ Viewer::Viewer(Producer::CameraConfig *cfg): Viewer::Viewer(const std::string& configFile): OsgCameraGroup(configFile), _done(false), - _frameNumber(0), _kbmcb(0), _recordingAnimationPath(false) { @@ -152,7 +149,6 @@ Viewer::Viewer(const std::string& configFile): Viewer::Viewer(osg::ArgumentParser& arguments): OsgCameraGroup(arguments), _done(false), - _frameNumber(0), _kbmcb(0), _recordingAnimationPath(false) { @@ -187,9 +183,6 @@ void Viewer::setUpViewer(unsigned int options) (new Producer::KeyboardMouse(ia)) : (new Producer::KeyboardMouse(getCamera(0)->getRenderSurface())); - // set up the time and frame counter. - _frameNumber = 0; - _start_tick = _timer.tick(); // set the keyboard mouse callback to catch the events from the windows. if (!_kbmcb) @@ -338,15 +331,6 @@ bool Viewer::realize() return _realized; } -void Viewer::sync() -{ - OsgCameraGroup::sync(); - - // set the frame stamp for the new frame. - double time_since_start = _timer.delta_s(_start_tick,_timer.tick()); - _frameStamp->setFrameNumber(_frameNumber++); - _frameStamp->setReferenceTime(time_since_start); -} void Viewer::update() {