zoukankan      html  css  js  c++  java
  • 帧缓冲(Framebuffer)

    将颜色缓冲,深度缓冲,模板缓冲结合起来,就叫做帧缓冲(存储在内存中)。

    具体创建方法以及用法这里不讲,LearnOpenGL对应章节有:帧缓冲

    这里说一下容易让人误解(或者难以理解)的地方。


    1. 实际上我们平时做的一些操作都是在默认帧缓冲中的渲染缓冲(Renderbuffer)中进行的,这里默认的帧缓冲是在创建窗口的时候GLFW生成和配置的。
    2. 我们可以创建自己的帧缓冲,方便进行一些后期处理操作(不明白的话往下看)。
    3. 帧缓冲至少需要一个颜色附件,附件当中至少要有一个缓冲类型(颜色,深度,模板)。
    4. 颜色附件中的“颜色”指的是附加到帧缓冲的时候的目标类型,注意和附件本身的存储格式区分开:比方说一个纹理颜色附件,那么创建纹理的时候存储格式应该为GL_RGB(源图格式也应该设置为GL_RGB),而附加到帧缓冲上的时候用:GL_COLOR_ATTACHMENT;又比如说一个纹理深度(模板)附件,那么创建纹理的时候就应该将存储格式改为GL_DEPTH_COMPOENT(GL_STENCIL_INDEX),而附加到帧缓冲的时候用GL_DEPTH_ATTACHMENT(GL_STENCIL_ATTACHMENT)。
    5. 另外一种附件叫做渲染缓冲附件(同纹理附件相对应),渲染缓冲对象直接将所有的渲染数据储存到它的缓冲中,不会做任何针对纹理格式的转换,让它变为一个更快的可写储存介质。然而,渲染缓冲对象通常都是只写的,所以你不能读取它们(比如使用纹理访问)。当然你仍然还是能够使用glReadPixels来读取它,这会从当前绑定的帧缓冲,而不是附件本身,中返回特定区域的像素。
    6. 一般纹理附件拿来当颜色附件,渲染缓冲附件拿来当 “模板&深度(一个整体)” 附件,同样,这里的"颜色”“模板&深度”指的都是附加到帧缓冲时候的目标类型。
    7. 那么什么时候选择纹理附件,什么时候选择渲染缓冲附件呢?
      通常的规则是,如果你不需要从一个缓冲中采样数据,那么对这个缓冲使用渲染缓冲对象会是明智的选择。如果你需要从缓冲中采样颜色或深度值等数据,那么你应该选择纹理附件。性能方面它不会产生非常大的影响的。
    8. 需要注意的是,这些附件只是存储最终结果的,实际渲染过程(深度测试,模板测试之类的)依旧由GLFW自己操作。
    9. 创建自己的帧缓冲有什么用呢?它的优势是什么呢?
      拿纹理附件(目标类型是颜色缓冲)来说的话,我们可以用图像的方式访问已经渲染场景的每个像素,所以可以在fragment shader中做出一些效果,比如说反相,灰度,更进一步,可以结合核(kernel)做出更加有特点的效果:锐化,模糊等。这些操作统称为后期处理(Post-processing)

    以上。

    原来人类的悲欢并不相通, 我只觉得他们吵闹。
  • 相关阅读:
    Vue学习手记01-安装和项目创建
    [Powershell] FTP Download File
    [PowerShell] Backup Folder and Files Across Network
    SSRS 请求并显示SharePoint人员和组字段
    Beta 冲刺 (2/7)
    Beta 冲刺 (1/7)
    BETA 版冲刺前准备
    事后诸葛亮
    Alpha 答辩总结
    α冲刺 (10/10)
  • 原文地址:https://www.cnblogs.com/zhlabcd/p/11800066.html
Copyright © 2011-2022 走看看