查看: 1923|回复: 9

如何实现多个相机对同一fbo绘制

[复制链接]

该用户从未签到

发表于 2013-10-5 11:51:55 | 显示全部楼层 |阅读模式
在做opengl移植时候遇到的,opengl里原来是先gen,然后bind一个fbo,然后用glframebuffertextureext,将fbo的一个分量绑定到纹理,然后绘制一个pass,然后再绑到另外一个纹理,再绘制一个pass。很清楚很明白。

现在在osg里半天没找到类似的操作,camera可以setrendertarget选择framebufferobject,但这个fbo是哪个呢,camera自己生成的?怎么提供出来给别的camera用呢?

该用户从未签到

 楼主| 发表于 2013-10-5 12:23:50 | 显示全部楼层
另外对于camera的其他几个rendertarget什么意思我还是想不出,framebuffer?是直接绘制到屏幕么?pixel buffer,应该是老的pbuffer。那pixelbufferrrt又有什么不一样?

该用户从未签到

发表于 2013-10-9 09:29:20 | 显示全部楼层
再次申明不要绑定到同一个fbo,对于您提升效率没有什么本质帮助,并且会写脏。
FrameBuffer就是显示器准备显示的内容所在的那块显卡内存,pbuffer或者扩展的pbuffer rtt都是早期的虚拟设备的离屏渲染方式,现在无疑应该换用FBO来实现offscreen rendering

该用户从未签到

 楼主| 发表于 2013-10-9 15:30:59 来自手机 | 显示全部楼层
array 发表于 2013-10-9 09:29
再次申明不要绑定到同一个fbo,对于您提升效率没有什么本质帮助,并且会写脏。
FrameBuffer就是显示器准备 ...

array您好,想用多个相机对一个fbo是希望在后一个相机绘制时使用前面相机绘制(计算?)结果作为输入,通过将相机绑定到framebuffer的不同分量,再设置相机的render order,应该能够实现,而且效率应该是比较高的。不知我理解的对不对?

该用户从未签到

发表于 2013-10-11 09:55:23 | 显示全部楼层
不对的,就算是纯OpenGL这个时候也应该用PingPongFBO的形式,而不是单张解决所有问题。GPU无法同时将一张纹理作为输入和输出,因为并行的片元计算在这种时候会脏到一塌糊涂,我认为您的想法从一开始就错了

该用户从未签到

 楼主| 发表于 2013-10-11 17:55:40 来自手机 | 显示全部楼层
array 发表于 2013-10-11 09:55
不对的,就算是纯OpenGL这个时候也应该用PingPongFBO的形式,而不是单张解决所有问题。GPU无法同时将一张纹 ...

我表达的可能不清楚吧,没有将一张纹理作为输入输出,只是一个fbo的不同颜色分量绑定的不同纹理,但是对于绘制的次序有要求,后一次绘制时候直接在shader中读取了fbo的前一个颜色glfragcolor[]作为输入了。opengl是实时的,直接调用绘制命令就行了。osg同一个相机能对

该用户从未签到

 楼主| 发表于 2013-10-11 17:57:11 来自手机 | 显示全部楼层
最后fbo绑定的这几个纹理都是作为输出的。

该用户从未签到

发表于 2013-10-15 09:59:22 | 显示全部楼层
多相机对FBO ??

该用户从未签到

发表于 2013-10-15 09:59:29 | 显示全部楼层
MRT?

该用户从未签到

发表于 2013-10-20 18:43:34 | 显示全部楼层
这不就是我在osgeffectcompositor里实现的后处理流程么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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