问题描述
我想用 OpenSceneGraph 运行这个伪代码:
while (!done) {
addNodetoSceneGraph();
displayCurrentSceneGraph();
waitForKeypressed();
}
我该如何实现它,最好使用标准的 OSG API?
编辑
这是一个具体的例子:
int main() {
osgViewer::Viewer viewer;
osg::Geode* geode = new osg::Geode();
viewer.setSceneData(geode);
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0,0),1)));
viewer.frame();
this_thread::sleep_for(seconds(2));
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(2,1)));
return viewer.run();
}
我想调用上面的 viewer.frame()
,显示第一个球体,2 秒后显示第二个球体。它会显示一个 2 秒的空白屏幕。我需要改变什么?
解决方法
调用 setCameraManipulator()
可以解决问题(请参阅 https://groups.google.com/g/osg-users/c/ToHowfxKbvE)。此代码段产生了预期的结果:
int main() {
osgViewer::Viewer viewer;
osg::Geode* geode = new osg::Geode();
viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.setSceneData(geode);
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0,0),1)));
viewer.frame();
this_thread::sleep_for(seconds(2));
geode->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(2,1)));
return viewer.run();
}