目前的框架如下:
osgViewer::viewBase:: frame()
{
viewerInit();[
//创建帧事件,并将漫游器与事件和视口相关联
-> osgViewer::Viewer::ViewerInit()
-> osgViewer::View::Init();
->(1)osgGA::EventQueue::createEvent();
(2)osgGA::MatrixManipulator::Init();
->(2.1)各种漫游器::init()
]
isRealized();[
//获取图形上下文数组。再遍历上下文数组,只要有一个准备好就Ok
-> osgViewer::Viewer::isRealized();
->(1)osgViewer::Viewer::getContexts().
->(1.1)osg::camera::getGraphicsContext()
->(1.2)osg::View::getNumSlaves()
->(1.3)osg::View::getSlave()
->(1.4)LessGraphicsContext()->osg::GraphicContext::getTraits()
->(2)osg::GraphicContext::isRealized()
->(2.1)->(1)
->(2.2)osg::GraphicsContext::isRealized()
->osg::GraphicsContext::isRealizedImplementation()
->(2.2.1)osgViewer::GraphicsWindow::isRealizedImplementation()
->(2.2.1.1)osgViewer:: GraphicsWindowWin32 ::isRealizedImplementation()
->(2.2.1.2) osgViewer::GraphicsWindowEmbedded ::isRealizedImplementation()
->(2.2.2)osgViewer::PixelBufferWin32::isRealizedImplementation()
-
]
realize();
advance(simulationTime);
eventTraversal();
updateTraversal();
renderingTraversals();
}
下一步,很明显要进行realize()了,但是太长,所以要改变从外到内的方式,而是一个函数一个函数地分析,最后汇总意说了些啥。
第一个函数是 setCameraWithFocus(0);
顾名思义,就是将焦点窗口设为NULL,即没有焦点窗口。
对于单窗口来说,很简单一句话
void setCameraWithFocus(osg::Camera* camera) { _cameraWithFocus = camera; }
对于多个视口类来说,还要判断,如果这个摄像机不为空,哪个视口为焦点视口。
bool osgViewer::View::containsCamera(const osg::Camera* camera) const,
判断方法也简单,就是对于这个视图,主从相机的指针是不是包含这个camera,
当然,还是以单窗口为例
目前的框架如下:
osgViewer::viewBase:: frame()
{
viewerInit();[
//创建帧事件,并将漫游器与事件和视口相关联
-> osgViewer::Viewer::ViewerInit()
-> osgViewer::View::Init();
->(1)osgGA::EventQueue::createEvent();
(2)osgGA::MatrixManipulator::Init();
->(2.1)各种漫游器::init()
]
isRealized();[
//获取图形上下文数组。再遍历上下文数组,只要有一个准备好就Ok
-> osgViewer::Viewer::isRealized();
->(1)osgViewer::Viewer::getContexts().
->(1.1)osg::camera::getGraphicsContext()
->(1.2)osg::View::getNumSlaves()
->(1.3)osg::View::getSlave()
->(1.4)LessGraphicsContext()->osg::GraphicContext::getTraits()
->(2)osg::GraphicContext::isRealized()
->(2.1)->(1)
->(2.2)osg::GraphicsContext::isRealized()
->osg::GraphicsContext::isRealizedImplementation()
->(2.2.1)osgViewer::GraphicsWindow::isRealizedImplementation()
->(2.2.1.1)osgViewer:: GraphicsWindowWin32 ::isRealizedImplementation()
->(2.2.1.2) osgViewer::GraphicsWindowEmbedded ::isRealizedImplementation()
->(2.2.2)osgViewer::PixelBufferWin32::isRealizedImplementation()
-
]
realize(); [
//建立视口和相关的线程
->osgViewer::Viewer::realize()
->(1) osgViewer::Viewer::setCameraWithFocus()
->(2)osgViewer::Viewer::getContexts()
->(3)待续
]
advance(simulationTime);
eventTraversal();
updateTraversal();
renderingTraversals();
}