OpenGL - FBO

原文链接http://www.songho.ca/opengl/gl_fbo.html

示意图如下:

概念要点:

1.窗口系统也提供有帧缓冲区,直接画到窗口系统提供的帧缓冲区就画到了屏幕,这里讨论的帧缓冲区(Framebuffer)为用户创建的,与窗口系统不同。

2.如果一个texture object附着(attach)到了framebuffer,那么opengl就表现为渲染到纹理(render to texure),如果一个renderbuffer object被附着到framebuffer,那么opengl就表现为离线渲染(offscreen rendering)

3.FBO有多个颜色缓冲区附着点,一个深度缓冲区附着点和一个模板缓冲区附着点,用于将三者附着到FBO

(如图,纹理对象一般附着到颜色缓冲区附着点,创建的renderbuffer一般附着到深度缓冲区附着点)

4.FBO提供了一种高效的切换机制,可以附着和解除上述三种缓冲区的附着,其中提供多个颜色缓冲区附着点是为了支持同时渲染多个目标

5.FBO本身不包含任何图像存储,只是包含多个附着点而已.

使用要点:

  • FBO must have at least one image attached.
  • All images attached a FBO must have the same width and height.
  • All images attached the color attachment points must have the same internal format
应用场景:
1.动态纹理(可以通过将场景渲染到纹理来实现,通常方式是将场景画到Framebuffer,然后通过glCopyTexSubImage2D()将framebuffer中的图像拷贝到纹理texture
2.当要渲染的纹理大于窗口大小时,如果采用窗口系统提供的帧缓冲区,会发生将屏幕外区域忽略的问题,而使用FBO就可以避免这一大小限制,使得可以创建一个比显示窗口大的可渲染帧缓冲区
3.渲染多个目标时(Multiple Render Targets):
You may write to several textures at the same time.

Simply create several textures (all with the correct and same size !), call glFramebufferTexture with a different color attachement for each, call glDrawBuffers with updated parameters ( something like (2,{GL_COLOR_ATTACHMENT0,GL_COLOR_ATTACHMENT1}})), and add another output variable in your fragment shader :


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值