osg fbo(一),生成颜色缓冲区图片

本文介绍了在OpenGL中使用FrameBufferObjects(FBO)进行离屏渲染的过程,包括生成颜色纹理、设置采样摄像机、将纹理应用到面片以及最终的三维到二维转换。通过这种方式,可以对场景进行额外的图像处理并显示结果。

由于工作需要,重新捡了下shader。很明显,fbo是重中之重。好记性不如烂笔头,先记录下

1,生成一个颜色纹理(为了省事,可以将纹理宽高=屏幕宽高)

osg::ref_ptr<osg::Texture2D> tex = createFloatRectangleTexture(texWidth, texHeight);

2,采样摄像机添加场景根,并把场景根的颜色缓冲区与纹理关联,

	sampleCamera->addChild(sceneRoot);
	sampleCamera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT); //这句话使内容不渲染到屏幕上
	sampleCamera->attach(osg::Camera::COLOR_BUFFER0, tex); //关联颜色贴图

3,将纹理关联到面片上,以方便加载使用

osg::ref_ptr<osg::Geode> panelGeode = createTexturePanelGeode();
osg::ref_ptr<osg::StateSet> ss = panelGeode->getOrCreateStateSet();
ss->setTextureAttributeAndModes(0, tex);

4,这个面片关联的纹理,由于是在摄像机坐标系下,所以要规格化坐标系,位置【-1,1】
纹理坐标【0,1】

osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
vertices->push_back(osg::Vec3(-1.0f, -1.0f, 0.0f));
vertices->push_back(osg::Vec3(1.0f, -1.0f, 0.0f));
vertices->push_back(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值