robertosfield wrote:
> Does the problem appear with your own viewer?  Does you own viewer setup the 
> Camera's replacing the viewer's master Camera?  Does this override neglect to 
> set up any default OpenGL state?
> 


I use the following class:

class ViewerWidget : public osgQt::GLWidget, public osgViewer::CompositeViewer

Here is a code snippet of the constructor:

Code:

ViewerWidget::ViewerWidget(QWidget* iParent, const QGLWidget* iShareWidget, 
Qt::WindowFlags iFlags)
: osgQt::GLWidget(iParent, iShareWidget, iFlags)
,timer(0)
{
   osgViewer::View* view = new osgViewer::View;
   view->setName("Main view");
   addView(view);
   
   view->setCamera(createCamera(viframework::viosg::screenWidth(), 
viframework::viosg::screenHeight()));
   view->setCameraManipulator(new osgGA::TrackballManipulator);
   initWindowManager(view);
}

osg::Camera* ViewerWidget::createCamera(int width, int height)
{
   osg::ref_ptr<osg::Camera> camera = new osg::Camera;
   camera->setGraphicsContext(new osgQt::GraphicsWindowQt(this));
   camera->setClearColor(osg::Vec4(0.2, 0.2, 0.6, 1.0));
   camera->setViewport(new osg::Viewport(0, 0, width, height));

   double aspect_ratio = 
2.0*static_cast<double>(width)/static_cast<double>(height);
   camera->setProjectionMatrixAsPerspective(30.0, aspect_ratio, 1.0, 10000.0);
   return camera.release();
}

void ViewerWidget::initWindowManager(osgViewer::View* iView)
{
   osg::ref_ptr<osgWidget::WindowManager> wm = new 
osgWidget::WindowManager(iView, 1280.0f, 1024.0f, MASK_2D, 
osgWidget::WindowManager::WM_USE_RENDERBINS);
   osg::Camera* camera = wm->createParentOrthoCamera();
   SceneManager manager;
   manager.getRoot()->addChild(camera);
   manager.setWindowManager(wm);
   wm->resizeAllWindows();

   iView->addEventHandler(new osgWidget::MouseHandler(wm));
   iView->addEventHandler(new osgWidget::ResizeHandler(wm, camera));
}

unsigned int viframework::viosg::screenHeight()
{
   osg::GraphicsContext::WindowingSystemInterface* wsi = 
osg::GraphicsContext::getWindowingSystemInterface();
   osg::GraphicsContext::ScreenSettings settings;
   osg::GraphicsContext::Traits traits;
   wsi->getScreenSettings(traits, settings);
   return static_cast<unsigned int>(settings.height);
}

unsigned int viframework::viosg::screenWidth()
{
   osg::GraphicsContext::WindowingSystemInterface* wsi = 
osg::GraphicsContext::getWindowingSystemInterface();
   osg::GraphicsContext::ScreenSettings settings;
   osg::GraphicsContext::Traits traits;
   wsi->getScreenSettings(traits, settings);
   return static_cast<unsigned int>(settings.width);
}




Cheers,
Gianni

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=57362#57362





_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to