查看: 1442|回复: 2

讨论关于scene view的东西

[复制链接]

该用户从未签到

发表于 2010-2-10 16:00:22 | 显示全部楼层 |阅读模式
在看了《最长的一桢》后,我对osg小组的scene view的设计理念非常感兴趣,不知道版主是否对这个东西有所研究。

     我的理解是,scene view的目的是在scene graph的基础上,对需要绘制的场景进行排序。并且抽象出pre render list和post render list,便于满足多种应用的需求。
     批量绘制相同glMode的物体可以避免切换glMode时带来的性能下降。

     如果我的理解没有错的话,我的问题如下:

1。每桢都需要更新scene view吗?
     如果是为了性能考虑,那scene view不应该是每桢都进行更新。只应该更新scene graph中有变化的节点。我没有找到相应的代码。

2。scene view怎么建立与scene graph的对应关系?
     如果scene graph有所更新,理想情况是只更新scen view中相对应的leaf和state graph,其他保留不变。那么就是说,必须要有一个scene view与scene graph的map关系,我还是没找到相应的代码。

3。ray tracing和ray casting
     按我的理解,ray tracing和ray casting可以利用scene view来实时完成,我只需要将需要做ray tracing/casting的节点打上标记,重载scene view的cullvisitor,重载特定的renderbin的draw。
     如果加上鼠标交互,那必然就要从bin->view->node,走一个反馈的路线。
     但现在scene view似乎没有与scene graph的对应关系,使得view->node这一层关系没办法建立。


如果我想法错了,还请多多指教,谢谢。

该用户从未签到

 楼主| 发表于 2010-2-10 16:02:46 | 显示全部楼层
补充,我最终想法是把scene view简化,现在的它太复杂了。。。。

该用户从未签到

发表于 2010-2-10 17:38:42 | 显示全部楼层
1。每桢都需要更新scene view吗?

要注意,OpenGL在每次绘制时都会先glClear(),也就是清除颜色缓存。这种情况下,事实上所有要显示的数据都要每帧重画。您当然也可以不清除颜色与深度缓存,但那意味着——所有上一帧绘制的数据都不会被清除。因此,您所想象的“只更新有变化的数据”是不可能的,不是OSG不去做,而是OpenGL不支持这种思想。
2。scene view怎么建立与scene graph的对应关系?
您所谓的scene graph与scene view的对应关系,就是我所说的状态树和渲染树,它们是通过CullVisitor对场景树的遍历而构建的。《最长的一帧》以及我的书中都对其有比较详细的叙述。您也可以据此继续深入研究和讨论您的问题。

3。ray tracing和ray casting
您需要更详细地解释一下,抱歉我不太明白您要做些什么。如果您对于体渲染很有兴趣的话,那么不妨看一下osgVolume库的实现
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表