本文整理汇总了C++中osgviewer::Viewer::done方法的典型用法代码示例。如果您正苦于以下问题:C++ Viewer::done方法的具体用法?C++ Viewer::done怎么用?C++ Viewer::done使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类osgviewer::Viewer
的用法示例。
在下文中一共展示了Viewer::done方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: run
/**
Run the dynamics for a cycle.
*/
void run( Real dt ) {
// fetch the command in the buffer
//get_command();
#ifdef USE_OSG
if (ONSCREEN_RENDER)
{
if (viewer.done())
return;
viewer.frame();
}
#endif
// Note: research how the original driver sets up all the parameters that
// drive step size. sim->step(dt) is not sufficient in and of itself so
// there must be another or more parameters that manipulate this state info
//sim->step( dt );
// step the sim forward
STEP_SIZE = dt;
step((void*) &sim);
// publish any state change
//publish_state();
//#ifdef USE_OSG
//usleep(DYNAMICS_FREQ);
//#endif
}
示例2: main
int main(int argc, char** argv)
{
viewer.setSceneData(root.get());
filename = argv[1];
startMenu = new StartMenu(&viewer, startApplication);
root->addChild(startMenu->_camera);
if(root.valid())
{
//viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.realize();
while(!viewer.done())
{
viewer.frame();
//update();
}
}
else
{
std::cout << "Invalid Graph!" << std::endl;
}
return 0;
}
示例3: step
// Step the dynamics forward
void step( const Real &dt ) {
#ifdef USE_OSG
if( ONSCREEN_RENDER ) {
if( viewer.done( ) ) return;
viewer.frame( );
}
#endif
// step the sim forward
STEP_SIZE = dt;
step( (void*) &sim );
}
示例4: main
//.........这里部分代码省略.........
// to textures.
std::string search_path = ";";
csp::ospath::addpath(search_path, "./data/images/");
csp::ospath::addpath(search_path, "./data/models/");
csp::ObjectModel::setDataFilePathList(search_path);
// Set paths for shader files.
Shader::instance()->setShaderPath("./data/shaders/");
// =====================================================================
// Manual creation of a object model.
Ref<ObjectModel> my_model = new ObjectModel();
// An external is used to handle the path to the scene graph file.
// It is also ensuring that paths is handled independent on operating
// system.
External modelPath;
modelPath.setSource("industry/refinery_column01/refinery_column01.osg");
my_model->setModelPath(modelPath);
my_model->setSmooth(true);
// Load the model from disc. This will also apply needed shaders.
// smoothing and more things.
my_model->loadModel();
// read osgEarth config file and create the globe
std::cout << "reading osgEarth config file: " << osgEarthFileName << std::endl;
osg::ref_ptr<osg::Node> globe = osgDB::readNodeFile(osgEarthFileName);
osg::ref_ptr<osg::Node> topNode = new osg::Node;
osg::Group* group = new osg::Group;
group->setName("root group");
// =====================================================================
// construct the viewer
viewer.addEventHandler(new osgViewer::StatsHandler);
viewer.addEventHandler(new osgViewer::HelpHandler);
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
// modify the key mapping of an osg default event handler
// this is just to demonstrate the principle, no real use case behind it...
osgViewer::View::EventHandlers eventHandlers = viewer.getEventHandlers();
// iterate through the viewer's event handlers and modify their default behavior
for (osgViewer::View::EventHandlers::iterator it = eventHandlers.begin(); it != eventHandlers.end(); ++it)
{
// EventHandlers is a list of osgGA::GUIEventHandlers, so RTTI is used to find out the derived class
if(osgViewer::WindowSizeHandler *winSizeHandler =
dynamic_cast<osgViewer::WindowSizeHandler *>(it->get()))
{
winSizeHandler->setKeyEventToggleFullscreen(osgGA::GUIEventAdapter::KEY_F2);
}
}
// Create overlay data
osg::ref_ptr<osg::Geode> statsGeometry = createStatsGeometry();
group->addChild( statsGeometry );
// add the osgEarth globe to the scene
group->addChild( globe.get() );
group->addChild( my_model->getModel().get() );
//viewer.setSceneData(my_model->getModel().get());
viewer.setSceneData( group );
//viewer.setSceneData(globe.get());
// create camera and context
setupCameraAndContext( viewer, windowWidth, windowHeight );
// the overlay geometry is added to an individual camera
// QUESTION: But why isn't it rendered by the primary cam?!?
statsCamera->addChild( statsGeometry );
//viewer.setCameraManipulator(new osgGA::FlightManipulator);
osgEarth::MapNode* mapNode = osgEarth::MapNode::findMapNode(globe);
manip = new osgEarthUtil::EarthManipulator();
manip->setNode(globe);
if ( mapNode->getMap()->isGeocentric() )
{
manip->setHomeViewpoint(
osgEarthUtil::Viewpoint( osg::Vec3d( -90, 0, 0 ), 0.0, -90.0, 5e7 ) );
}
manip->getSettings()->bindMouseDoubleClick(
osgEarthUtil::EarthManipulator::ACTION_GOTO, osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON );
viewer.setCameraManipulator(manip);
viewer.addEventHandler(new inputHandler());
// run the viewers frame loop
viewer.realize();
// main loop (note, window toolkits which take control over the main loop will require
// a window redraw callback containing the code below.)
while(!viewer.done())
{
viewer.frame();
}
}
示例5: run
int Metrics::run(osgViewer::Viewer& viewer)
{
if (Metrics::enabled())
{
if (!viewer.isRealized())
{
viewer.realize();
}
// If Metrics are enabled, enable stats on the Viewer so that it we can report them for the Metrics
if (Metrics::enabled())
{
osgViewer::ViewerBase::Scenes scenes;
viewer.getScenes(scenes);
for (osgViewer::ViewerBase::Scenes::iterator itr = scenes.begin();
itr != scenes.end();
++itr)
{
osgViewer::Scene* scene = *itr;
osgDB::DatabasePager* dp = scene->getDatabasePager();
if (dp && dp->isRunning())
{
dp->resetStats();
}
}
viewer.getViewerStats()->collectStats("frame_rate", true);
viewer.getViewerStats()->collectStats("event", true);
viewer.getViewerStats()->collectStats("update", true);
viewer.getCamera()->getStats()->collectStats("rendering", true);
viewer.getCamera()->getStats()->collectStats("gpu", true);
}
// Report memory and fps every 10 frames.
unsigned int reportEvery = 10;
while (!viewer.done())
{
{
METRIC_SCOPED_EX("frame", 1, "number", toString<int>(viewer.getFrameStamp()->getFrameNumber()).c_str());
{
METRIC_SCOPED("advance");
viewer.advance();
}
{
METRIC_SCOPED("event");
viewer.eventTraversal();
}
{
METRIC_SCOPED("update");
viewer.updateTraversal();
}
{
METRIC_SCOPED("render");
viewer.renderingTraversals();
}
}
// Report memory and fps periodically. periodically.
if (viewer.getFrameStamp()->getFrameNumber() % reportEvery == 0)
{
// Only report the metrics if they are enabled to avoid computing the memory.
if (Metrics::enabled())
{
Metrics::counter("Memory::WorkingSet", "WorkingSet", Memory::getProcessPhysicalUsage() / 1048576);
Metrics::counter("Memory::PrivateBytes", "PrivateBytes", Memory::getProcessPrivateUsage() / 1048576);
Metrics::counter("Memory::PeakPrivateBytes", "PeakPrivateBytes", Memory::getProcessPeakPrivateUsage() / 1048576);
}
}
double eventTime = 0.0;
if (viewer.getViewerStats()->getAttribute(viewer.getViewerStats()->getLatestFrameNumber(), "Event traversal time taken", eventTime))
{
Metrics::counter("Viewer::Event", "Event", eventTime * 1000.0);
}
double updateTime = 0.0;
if (viewer.getViewerStats()->getAttribute(viewer.getViewerStats()->getLatestFrameNumber(), "Update traversal time taken", updateTime))
{
Metrics::counter("Viewer::Update", "Update", updateTime * 1000.0);
}
double cullTime = 0.0;
if (viewer.getCamera()->getStats()->getAttribute(viewer.getCamera()->getStats()->getLatestFrameNumber(), "Cull traversal time taken", cullTime))
{
Metrics::counter("Viewer::Cull", "Cull", cullTime * 1000.0);
}
double drawTime = 0.0;
if (viewer.getCamera()->getStats()->getAttribute(viewer.getCamera()->getStats()->getLatestFrameNumber(), "Draw traversal time taken", drawTime))
{
Metrics::counter("Viewer::Draw", "Draw", drawTime * 1000.0);
}
double gpuTime = 0.0;
//.........这里部分代码省略.........