|
本帖最后由 CWorld 于 2013-3-6 17:41 编辑
问题描述:
在使用FBO方式截图, 关联FBOCamera渲染到Frame Object buffer, 一般情况我们指定了 FBOCamera的RenderOrder为
PreRender
对于backGroudGeode节点(背景图),比如我们渲染图像的背景为一幅画面,我们使用BackCamera进行实现,指定渲染顺序为ReaderOrder为 PostRender。
因为两个相机的渲染顺序不一致,所以导致截图无法保存BackGroudGeode节点的信息?
场景的组织为如下,其中Scene为正常场景,
Root
/ | \
/ | \
FBOCamera Scene BackGroudCamera
/ \
/ \
Scene BackGroudGeode
请问如何能使用FBO方式截图保存含有backGroundGeode节点背景? 请大牛指点?
以下是我自己的分析与疑问:
1: 第一种方式,考虑使用FBOCamera->addChild(backGroudCamera) ? ,这个经过我的测试,似乎会死机。
2: 第二种方法, 把背景节点的内容backGroudGeode的内容,加入到FBOCamera中, 即 FBOCamera->addChild(BackGroudGeode), 这种似乎也不可行
3: 第三种方法: 增加了一个FBOCamera,提前渲染背景,并将背景渲染到FBO上,即通过指定
FBOCamearFirst和FBOCamera的SetRenderOrder来控制顺序,并且相机都Attach到帧缓冲区中,不过这种方法还是失败了。
Root
/ / | \
/ / | \
FBOCameraFirst FBOCamera Scene BackGroudCamera
/ / \
/ / \
BackGroudGeode Scene BackGroudGeode
请问大牛,这种情况,该如何处理呢? 首先是我必须要使用FBO截图,因为我需要截取的图像格式是32位float类型,但是我又必须要截取背景图像?
感觉这种情况,用OpenGL是可以实现的?到了OSG以后,就无法转换为比较合理的代码逻辑了?
|
|