|
楼主 |
发表于 2009-2-19 15:28:00
|
显示全部楼层
首先, 在RTT之前,要把多个纹理单元绑定到osg::Camera类中,如下:
camera->attach(osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0+i), textureRect);
其次,要为camera设置一个osg:rawable对象(一般来说,就是一个GL_QUAD),在这个类中通过编写pixel shader,将场景绘制到以上设置的textureRect中,如下(RTT):
gl_FragData = color;
再次,如果要对产生的纹理进行后处理(PostProcess),那就需要另外创建osg::Drawable对象,并把以上生成的 textureRect作为该对象的纹理,同时编写相应的 PostProcess Pixel Shader 来对这些纹理进行处理。
其中,关键的一点就是既要把 textureRect 同时设置为osg::Camera的Frame Buffer Object,又要将其设置为PostProcess中的 osg::Drawable对象的纹理。 另外,别忘了要设置: camera->setRenderOrder(osg::Camera:RE_RENDER),这样,可以保证 textureRect在主camera对整个场景绘制之前已经产生。 |
|