OpenGL&CG技术之Render To Texture

本文详细介绍了OpenGL中的Frame Buffer Object(FBO)概念,解释了如何使用FBO进行Render To Texture(RTT),并给出了实现RTT的步骤和实际代码示例,帮助读者理解将场景渲染到纹理上的技术。
摘要由CSDN通过智能技术生成

作者:i_dovelemon

日期:2015/12/26

来源:CSDN

主题:OpenGL,CG,FBO,Render To Texture


引言


       最近一段时间,一直在研究OpenGL+CG编写各种各样的效果。由于需要,需要掌握”如何将场景渲染到一个贴图上来,然后供后续使用“这样的技术。为此,特意上网搜索了一番。在OpenGL中,可以通过使用一个名为Frame Buffer Object的对象来完成这样的任务。下面我们就一步一步的解决所有的问题,并且最终实现这个效果。


Frame Buffer Object是什么?


       第一步,我们需要弄明白这个Frame Buffer Object是个什么东西。如果不明白它是什么,就盲目的摘抄网上给出的代码,总觉得很别扭,心里不舒服。为此,特意去Wiki了解了一下Frame Buffer Object的概念。

       

       在3D图形学中,不管我们在前期进行如何的处理,最终实际上都是要显示在屏幕上的。而在屏幕上显示的东西是一个一个的像素,也就是说必然存在一块内存,这块内存容纳了所有的屏幕上的像素点。在OpenGL中,默认情况下它最终输出到的地方是一个由Windows自行创建管理的一块内存,我们称之为帧缓存(Frame Buffer)。而对于我们现在的要求,我们并不需要将最终处理完毕的数据输出到这个帧缓存中去,而是需要输入到一块由我们自己指定的缓存中去。这就是FBO需要使用的地方。

       当然,FBO的结构十分的复杂,它是各种缓存如Color Buffer, Depth Buffer, Stencil Buffer等等的集合。当我们不想要向系统默认的缓存中输出这些值的时候,我们就可以通过指定我们自己创建FBO,然后输出数据到指定的地方。

       同时需要注意的一点就是,FBO是各个缓存的集合,但并不是说我们指定了一个FBO,系统就会将各个Buffer的值输出到这个FBO中去。由于类似的的buffer有很多,但是在实际使用的过程中往往不需要全部都使用到,也就是说我们可以有选择的指定哪些buffer是我们想要的,然后通过FBO将这些buffer输出到指定的地方。所以FBO更像是一个过滤器,它会将用户指定的缓存发送到用户指定的地方去,如Texture或者Render Buffer。

       而指定到底要输出那些缓存以及要输出到什么地方的操作被称为Attachment(附加)。在FBO中存在这很多的附加点,我们只要将我们创建的用于容纳缓存的对象附加到FBO的指定附加点,那么就能够从那里接受到对应的缓存数据。


       为了更加形象的讲解这个附加的概念,给出下面的图,供大家理解:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值