关于OSG中主相机和从相机的浅显理解
来源:互联网 发布:windows重置出现问题 编辑:程序博客网 时间:2024/06/07 18:33
关于OSG中主相机和从相机的浅显理解
本文主要说明以下问题:
- 如何设置主相机
- 如何设置从相机(slaves)
- 主相机和从相机的关系
前言
我们在配置好OSG编译环境后,一般都会通过运行以下代码来测试是否配置成功:
#include<osgViewer/Viewer>#include<osgDB/ReadFile>int main( int argc, char **argv ){ osgViewer::Viewer viewer; viewer.setSceneData( osgDB::readNodeFile( "cow.osg" ) ); return viewer.run();}
但在这段代码中,表面上并没有对相机进行任何设置,因而关于相机的操作对于我们来说几乎是透明的。因此在以后学习有关相机的操作时,我被这段代码搞得稀里糊涂,今天就小小总结一下。
主相机
通过查看我们最熟悉的osgViewer::Viewer的成员,可以看到,他包含一个_camera和_slaves,这个_camera就代表了主相机。
而让人疑惑的是,在上面的代码中,我们并没有手动设置主相机。实际上,当我们没有设置主相机时,OSG会使用一个默认的Camera节点,之后的setSceneData也会将场景追加到这个相机节点下。
从相机
有的时候,我们需要为当前的程序添加多个相机,比如使用渲染到纹理时。这时候从相机就发挥作用了。一个osgViewer::Viewer只有一个主相机,但可以有多个从相机。我们可以使用如下方法来添加从相机:
默认情况下,从相机会使用和主相机相同的场景进行渲染,但我们也可以为从相机添加其自己的场景模型,有一点虽然看似习以为常,但却十分重要:在OSG中场景要想被渲染出来,它必须位于一个Camera节点之下
另外,有时候我们还可以自定义相机的图像上下文,就像下面这样,
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile("cow.osg"); osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer; { osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; traits->x = 40; traits->y = 40; traits->width = 600; traits->height = 480; traits->windowDecoration = true; traits->doubleBuffer = true; traits->sharedContext = 0; osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get()); osg::ref_ptr<osg::Camera> camera = new osg::Camera; camera->setGraphicsContext(gc.get()); camera->setViewport(new osg::Viewport(0,0, traits->width, traits->height)); GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT; camera->setDrawBuffer(buffer); camera->setReadBuffer(buffer); // add this slave camera to the viewer, with a shift left of the projection matrix viewer->addSlave(camera.get()); }
主相机与从相机的关系
按照我个人的理解,当我们没有手动设置主相机,而同时又添加了从相机时,就会添加的场景模型就会通过从相机来渲染。因此,用主相机和用从相机进行场景的渲染,有时候并无差别。
参考资料
[osg示例解析之osgcamera(1)]http://blog.csdn.net/csxiaoshui/article/details/51517203
[OSG类参考]
http://trac.openscenegraph.org/documentation/OpenSceneGraphReferenceDocs/a01035.html
[osg窗口化实现 ]http://blog.163.com/liu7667715@126/blog/static/67132488201211611464444/
- 关于OSG中主相机和从相机的浅显理解
- OSG中相机参数的更改
- osg 添加从相机,相机缓存,相机背景色等
- OSG中获取任一时刻相机的位置
- 关于map和set的浅显理解
- 相机标定简单的笔记和理解
- OSG 实现跟随节点的相机
- OSG实现跟随节点的相机
- OSG相机的一些函数解析
- OSG一个terrain相机
- OSG相机与视图
- osg相机漫游
- osg 相机坐标系
- osg 相机操作
- 关于mobile中相机的处理方法
- 关于相机传感器和镜头的关系
- 关于相机的使用
- 关于相机的屏幕分辨率
- codeforces884D(大概是构造,优先队列)
- springmvc 多拦截器配置
- hadoop生态圈各产品基本概念梳理
- Spring RestTemplate 用法总结
- 英语之数词规则
- 关于OSG中主相机和从相机的浅显理解
- DOM事件流
- android.content.res.Resources$NotFoundException: String resource ID #0x760a7
- 决战618:探秘京东技术取胜之道
- 10月27日Scalers签名书获奖结果
- Hashtable与HashMap区别
- css-4(浮动:float 定位:position)
- 树
- java基础--基本数据类型,运算符