[osg-users] porting from osg-3.4.0 to osg-3.6.3
Herman Varma
hermanvarma at eastlink.ca
Tue Oct 9 06:49:43 PDT 2018
Hi Robert
Yes VTP calls setEventVisitor
m_pOsgViewer->setEventVisitor(NULL);
in
bool vtScene::Init(int argc, char** argv, bool bStereo, int iStereoMode)
Code is listed below marked as //*******CALLED HERE
/**
* Initialize the vtlib library, including the display and scene graph.
* You should call this function only once, before any other vtlib calls.
*
* \param argc, argv Command-line arguments.
* \param bStereo True for a stereo display output.
* \param iStereoMode Currently for vtosg, supported values are 0 for
* Anaglyphic (red-blue) and 1 for Quad-buffer (shutter glasses).
*/
bool vtScene::Init(int argc, char** argv, bool bStereo, int iStereoMode)
{
VTLOG1("vtScene::Init\n");
// Redirect cout messages (where OSG sends its messages) to our own log
previous_cout = std::cout.rdbuf(&g_Trap);
previous_cerr = std::cerr.rdbuf(&g_Trap);
#if 0
// If you encounter trouble in OSG that you want to debug, enable this
// to get a LOT of diagnostic messages from OSG.
osg::setNotifyLevel(osg::INFO);
#endif
m_pDefaultCamera = new vtCamera;
m_pDefaultWindow = new vtWindow;
SetCamera(m_pDefaultCamera);
AddWindow(m_pDefaultWindow);
// use an ArgumentParser object to manage the program arguments.
osg::ArgumentParser arguments(&argc,argv);
m_pOsgViewer = new osgViewer::Viewer(arguments);
m_pOsgViewer->setDisplaySettings(osg::DisplaySettings::instance());
if (bStereo)
{
osg::DisplaySettings* displaySettings = m_pOsgViewer->getDisplaySettings();
displaySettings->setStereo(true);
osg::DisplaySettings::StereoMode mode;
if (iStereoMode == 0) mode = osg::DisplaySettings::ANAGLYPHIC;
if (iStereoMode == 1) mode = osg::DisplaySettings::QUAD_BUFFER;
if (iStereoMode == 2) mode = osg::DisplaySettings::HORIZONTAL_SPLIT;
if (iStereoMode == 3) mode = osg::DisplaySettings::VERTICAL_SPLIT;
displaySettings->setStereoMode(mode);
}
#ifdef __DARWIN_OSX__
// Kill multi-threading on OSX until wxGLContext properly implemented on that platform
m_pOsgViewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
#endif
// We can't use displaySettings->setNumMultiSamples here to enable anti-
// aliasing, because it has to be done eariler (at the time the OpenGL
// context is made).
#ifdef VTP_USE_OSG_STATS
osgViewer::StatsHandler* pStatsHandler = new osgViewer::StatsHandler;
pStatsHandler->setKeyEventPrintsOutStats(0);
pStatsHandler->setKeyEventTogglesOnScreenStats('x'); // I dont think this is used for anything else at the moment
m_pOsgViewer->addEventHandler(pStatsHandler);
#endif
// Kill the event visitor (saves a scenegraph traversal)
// This will need to be restored if we need to use FRAME events etc. in the scenegraph
m_pOsgViewer->setEventVisitor(NULL);//*******CALLED HERE
if (bStereo)
{
// displaySettings->getScreenDistance(); default is 0.5
// m_pOsgSceneView->getFusionDistanceMode(); default is PROPORTIONAL_TO_SCREEN_DISTANCE
// m_pOsgSceneView->getFusionDistanceValue(); default is 1.0
// The FusionDistanceValue is only used for USE_FUSION_DISTANCE_VALUE & PROPORTIONAL_TO_SCREEN_DISTANCE modes.
// We use real-world units for fusion distance value
m_pOsgViewer->setFusionDistance(osgUtil::SceneView::USE_FUSION_DISTANCE_VALUE, 100.0f);
}
// From the OSG mailing list: You must specify the lighting mode in
// setDefaults() and override the default options. If you call
// setDefaults() with the default options, a headlight is added to the
// global state set of the SceneView. With the default options applied,
// I have tried subsequently calling setLightingMode(NO_SCENE_LIGHT)
// and setLight(NULL), but I still get a headlight.
m_pOsgViewer->setLightingMode(osg::View::NO_LIGHT);
m_pOsgViewer->getCamera()->setComputeNearFarMode(osg::Camera::DO_NOT_COMPUTE_NEAR_FAR);
m_pOsgViewer->getCamera()->setCullingMode(m_pOsgViewer->getCamera()->getCullingMode() & ~osg::CullSettings::SMALL_FEATURE_CULLING);
// We maintain a node between OSG's viewer/camera and the vtlib Root, to
// control global state
m_StateRoot = new osg::Group;
m_pOsgViewer->setSceneData(m_StateRoot);
// By default, things are lit, unless they ask not to be
m_StateRoot->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::ON);
//m_StateRoot->addCullCallback(new MyCull);
//m_StateRoot->setUpdateCallback(new MyUpdate);
//m_StateRoot->setEventCallback(new MyEvent);
m_bInitialized = true;
_initialTick = _timer.tick();
_frameTick = _initialTick;
return true;
}
Thank you!
Cheers,
Herman
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=75053#75053
More information about the osg-users
mailing list