第三天的内容,调试用了我三天的业余时间,最后都不想说话了,想吐,直接上代码了事。终于明白电子书上说的, 不想赶上资本论的规模了。因为根据图形上下文创建设备,不只是窗口,还涉及到了背后的消息队列。
接着奏乐接着舞,进行第四天。
按照老规矩,先看全局。

介绍了几个函数,再回顾一下
取得与平台相关的视频API接口类,是个纯虚基类,父类调用子类的方式去实现。



View::setUpViewAcrossAllScreens()还有一种多个从摄像机对应多个屏幕的情况,在else里

针对水平分割显示(HORIZONTAL_SPLIT),对摄像机的左右眼设置自动做了处理


在setUpViewAcrossAllScreens()还有最后一步



![]()
![]()
可以看到,osgViewer::Scene类里有成员变量场景数据,分页数据库和图像数据库



![]()



![]()




































考察子节点的更新回调,事件回调,剔除和遮挡














![]()


渲染器的类先列出来,有个印象









上边调试错了,到了setsceneData(),应该是realize(),不过都是调用 assignSceneDataToCameras();不影响流程.
设置了图形上下文设备后,再次使用getContexts(),如果还不成功,说明图形窗口每建立起来,osg退出

下面终于和电子书的realize()连接上了,不用自己胡言乱语了。
遍历所有的图形上下文设备,进行realize()


,调用子类GraphicsWindowWin32的函数



i

_realizeOperation=null,直接跳过

把电子书上的图拷贝过来。

这个就说了个父类调用子类的事情。
osg::GraphicsContext::WindowingSystemInterface的子类有win32WindowingSystem,x11windowingsysteminterface,osgCarbonWindowingSystemInterface;等。
osg::GraphicsContext的子类有osgViewer::GraphicsWindowwin32,osgViewer::GraphicsWindowX11,osgViewer::GraphicsWindowCarbon等
当然,这些子类有的没实现 ,但是不影响以后扩展了可以调用。
上图的流程简单地说,
1,主从摄像机需要图形上下文
2,图形上下文需要父类调用子类创建。
另外,在windows创建图形上下文时,有个pbuffer,有效时就是离屏渲染,纹理烘焙;无效时就是普通的opengl窗口


另外,提到了_realizeOperation

这个变量通过ViewerBase::setRealizeOperation来设置,主要作用时在执行realize()时,顺便完成用户指定的一些工作。自己的工作内容,可以通过继承osg::Operation类,并重载operator()操作符来添加。


ok,第四天的内容就到这里吧。

3万+

被折叠的 条评论
为什么被折叠?



