Hello,
I am curious to know if anyone have experience with how to make osgWidget work
together with a CompositeViewer, before I try and examine the implementation in
depth. I have not found anything on the forum, except for a statement saying
that "it's definitely supported" (from the author I believe).
I have a CompositeViewer with two views (osgViewer::View objects). They are
drawing into two separate windows. I am creating an osgWidget::WindowManager,
to which I provide one of my views. I then create a simple box widget, which
renders in the correct position. When I resize the window, everything adjusts
as expected. However, when I resize the other (non-related) window
corresponding to view number 2, the widget in the first view's window scales
and gets partly invisible. Is there anything that easily can be done to avoid
this relation?
Regards,
Linus
I post the example code for clarity:
const unsigned int MASK_3D = 0x0F000000;
osgViewer::CompositeViewer* viewer = new osgViewer::CompositeViewer;
// view one
osgViewer::View* view1 = new osgViewer::View;
view1->setName("View one");
viewer->addView(view1);
osg::Node* model1 = osgDB::readNodeFile("spaceship.osg");
model1->setNodeMask(MASK_3D);
view1->setUpViewInWindow(100, 100, 600, 400, 1);
view1->setCameraManipulator(new osgGA::TrackballManipulator);
// view two
osgViewer::View* view2 = new osgViewer::View;
view2->setName("View two");
viewer->addView(view2);
osg::Node* model2 = osgDB::readNodeFile("avatar.osg");
model2->setNodeMask(MASK_3D);
view2->setUpViewInWindow(100, 100, 600, 400, 0);
view2->setCameraManipulator(new osgGA::TrackballManipulator);
osgWidget::WindowManager* wm = new osgWidget::WindowManager(
view1,
600.0f,
400.0f,
MASK_3D);
osg::Camera* cameraHUD = wm->createParentOrthoCamera();
view1->addEventHandler(new osgWidget::MouseHandler(wm));
view1->addEventHandler(new osgWidget::ResizeHandler(wm, cameraHUD));
view1->addEventHandler(new osgWidget::CameraSwitchHandler(wm,
cameraHUD));
view1->addEventHandler(new osgWidget::KeyboardHandler(wm));
osgWidget::Window* box1 = createBox("HBOX", osgWidget::Box::HORIZONTAL);
box1->getBackground()->setColor(1.0f, 0.0f, 0.0f, 0.8f);
box1->attachMoveCallback();
wm->addChild(box1);
osg::Group* group1 = new osg::Group;
group1->addChild(cameraHUD);
group1->addChild(model1);
osg::Group* group2 = new osg::Group;
group2->addChild(model2);
view1->setSceneData(group1);
view2->setSceneData(group2);
return viewer->run();
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org