首页
学习
活动
专区
圈层
工具
发布

一看就懂的 OpenGL 基础概念(4):各种 O 之 FBO丨音视频基础

一般来讲,必要的是颜色缓冲区和深度缓冲区,模板缓冲区、累加缓冲区是可选的。...模板缓冲区、累积缓冲区等这些真正的缓冲区对象,我们把这里的『指向关系』叫做附着,而 FBO 中的附着点类型有:颜色附着、深度附着和模板附着。...渲染缓冲区对象(Render Buffer Object,RBO)则是一个由应用程序分配的 2D 图像缓冲区,可以分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。...所以,建构一个完整的 FBO 需要满足下列条件: 必须往 FBO 里面加入至少一个附件(颜色、深度、模板缓冲); 其中至少有一个是颜色附件; 所有的附件都应该是已经完全做好的(已经存储在内存之中); 每个缓冲都应该有同样数目的样本...1)使用纹理附件 当把一个纹理(Texture)附加到 FBO 上的时候,所有渲染命令会写入到纹理上,就像它是一个普通的颜色/深度或者模板缓冲一样。

2.4K30

《WebGL中FBO的底层运行逻辑》

这些接口并非随意设置,而是对应着实验必须记录的核心数据:颜色附着点如同光谱仪,捕捉着每个像素的色彩信息;深度附着点类似测距仪,记录着像素在三维空间中的深度值,确保远处的物体不会"穿透"近处的物体;模板附着点则像一块镂空模板...这种模块化设计赋予了FBO极强的适应性:渲染简单的2D图形时,只需连接颜色附着点;处理复杂的3D碰撞检测时,则需同时启用深度附着点。...创建FBO的过程,就像在后台搭建专属的"摄影棚":首先要明确拍摄需求—是只需记录色彩(如制作动态纹理),还是需要同时记录深度(如实现阴影效果);然后根据需求选择合适的"设备"—为颜色附着点装上纹理对象(...方便后续复用),为深度附着点接上渲染缓冲对象(保证实时性)。...阴影效果的实现同样依赖这种思路:从光源的视角将场景渲染到FBO的深度纹理中,得到的"深度图"记录了每个点与光源的距离;正常渲染时,通过对比物体像素与深度图的距离,就能判断该像素是否处于阴影中。

18200
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NDK OpenGLES3.0 开发(五):FBO 离屏渲染

    FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了 3 个附着(Attachment),分别是颜色附着、深度附着和模板附着。...渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。...使用 FBO 作为渲染目标时,首先需要为 FBO 的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。 ?...怎么用 FBO 创建并初始化 FBO 的步骤: // 创建一个 2D 纹理用于连接 FBO 的颜色附着 glGenTextures(1, &m_FboTextureId); glBindTexture(...(GL_TEXTURE_2D, m_FboTextureId); // 将纹理连接到 FBO 附着 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0

    2.3K72

    【Android 音视频开发打怪升级:OpenGL渲染视频画面篇】五、OpenGL FBO数据缓冲区

    之所以说是缓冲索引,是因为FBO并不包含这些缓冲数据,仅仅保存了缓冲数据的索引地址。 FBO和这些缓冲区则通过附着点进行连接。 ? 可以看到FBO中包含了: 1....多个颜色附着点(GL_COLOR_ATTACHMENT0、GL_COLOR_ATTACHMENT1...) 2. 一个深度附着点(GL_DEPTH_ATTACHMENT) 3....渲染缓冲对象RBO(Render Buffer Objecgt):主要用于渲染深度信息和模板信息。 在2D中,通常只用到了颜色附着,另外两种附着通常在3D渲染中使用。...的流程了: 新建纹理 新建FBO 绑定将纹理附着到FBO的颜色附着点上 【渲染】 解绑FBO 删除FBO 除了第4步以外,其他都是上面的封装好的方法。...四、总结 以上就是整个使用FBO的过程,使用也非常的简单。当然了,只关注了颜色附着的部分,另外的深度附着和模板附着有兴趣的可以自行探索学习。

    3.1K42

    OpenGL ES 如何一次性渲染到多个纹理?

    利用 MRT 技术,片段着色器可以输出多个颜色,可以用于保存 RGBA 颜色、 法线、 深度信息或者纹理坐标,每个颜色连接一个颜色缓冲区。...使用 MRT 技术,一般需要为帧缓冲区对象(FBO)的设置多个颜色附着。...FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。...FBO 帧缓冲区对象 FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它提供了 3 种附着(Attachment),分别是颜色附着、深度附着和模板附着。...本文为演示 MRT 技术的使用,为 FBO 的颜色附着设置 4 个纹理,一个纹理作为一个颜色附着(颜色缓冲区)。

    3.5K51

    OpenGL ES 多目标渲染(MRT)

    利用 MRT 技术,片段着色器可以输出多个颜色,可以用于保存 RGBA 颜色、 法线、 深度信息或者纹理坐标,每个颜色连接一个颜色缓冲区。...使用 MRT 技术,一般需要为帧缓冲区对象(FBO)的设置多个颜色附着。...FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。 ?...FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它提供了 3 种附着(Attachment),分别是颜色附着、深度附着和模板附着。...本文为演示 MRT 技术的使用,为 FBO 的颜色附着设置 4 个纹理,一个纹理作为一个颜色附着(颜色缓冲区)。

    3.2K31

    WebGL2系列之多采样渲染缓冲对象

    多采样渲染缓冲对象 在WebGL2中,有了一个新的特性,叫做Multisampled Renderbuffer,恩,中文呢就叫做: 多采样渲染缓冲对象吧;通过多采样渲染缓冲对象,可以在帧缓冲区的渲染缓冲对象上实现...多采样纹理附件 多采样纹理附件又是什么东西呢,好吧,其实在WebGL2中,没有这个多采样纹理附件,在OPENGL才有,为什么提到这个多采样纹理附件,大部分时间,我们的离屏渲染都需要渲染到一个纹理对象上面...指定read framebuffer上的区域; dstX0, dstY0, dstX1, dstY1 指定draw framebuffer上的区域; mask指定那个buffer的内容会被copy,可选值:...gl.COLOR_BUFFER_BIT gl.DEPTH_BUFFER_BIT gl.STENCIL_BUFFER_BIT filter 表示当两个区域大小不同的时候,插值的方式,可以是以下值: gl.NEAREST...gl.DRAW_FRAMEBUFFER 以上两种目标分别表示FBO可以分别进行读操作和写操作;这在FBO复制到FBO的时候很有用,就像前文中所叙述的,可以把READ_FRAMEBUFFER上的数据复制到

    1.1K20

    熟悉 OpenGL VAO、VBO、FBO、PBO 等对象,看这一篇就够了

    为获得数据队列中下一个属性值(比如位置向量的下个 3 维分量)我们必须向右移动 6 个 float ,其中 3 个是位置值,另外 3 个是颜色值,那么步长就是 6 乘以 float 的字节数(= 24...FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。...FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了 3 个附着(Attachment),分别是颜色附着、深度附着和模板附着。...渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。...使用 FBO 作为渲染目标时,首先需要为 FBO 的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。

    11.7K85

    面试中经常被问到的 OpenGL ES 对象,你知道的有哪些?

    为获得数据队列中下一个属性值(比如位置向量的下个 3 维分量)我们必须向右移动 6 个 float ,其中 3 个是位置值,另外 3 个是颜色值,那么步长就是 6 乘以 float 的字节数(= 24...FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。...FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了 3 个附着(Attachment),分别是颜色附着、深度附着和模板附着。...渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。...使用 FBO 作为渲染目标时,首先需要为 FBO 的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。 ?

    2.5K50

    WebGL2系列之多采样渲染缓冲对象

    多采样渲染缓冲对象 在WebGL2中,有了一个新的特性,叫做Multisampled Renderbuffer,恩,中文呢就叫做: 多采样渲染缓冲对象吧;通过多采样渲染缓冲对象,可以在帧缓冲区的渲染缓冲对象上实现...#多采样纹理附件 多采样纹理附件又是什么东西呢,好吧,其实在WebGL2中,没有这个多采样纹理附件,在OPENGL才有,为什么提到这个多采样纹理附件,大部分时间,我们的离屏渲染都需要渲染到一个纹理对象上面...指定read framebuffer上的区域; dstX0, dstY0, dstX1, dstY1 指定draw framebuffer上的区域; mask指定那个buffer的内容会被copy,可选值:...* gl.COLOR_BUFFER_BIT * gl.DEPTH_BUFFER_BIT * gl.STENCIL_BUFFER_BIT filter 表示当两个区域大小不同的时候,插值的方式,可以是以下值...* gl.DRAW_FRAMEBUFFER 以上两种目标分别表示FBO可以分别进行读操作和写操作;这在FBO复制到FBO的时候很有用,就像前文中所叙述的,可以把READ_FRAMEBUFFER上的数据复制到

    1.3K30

    OpenGL ES 对象

    为获得数据队列中下一个属性值(比如位置向量的下个 3 维分量)我们必须向右移动 6 个 float ,其中 3 个是位置值,另外 3 个是颜色值,那么步长就是 6 乘以 float 的字节数(= 24...FBO(Frame Buffer Object)即帧缓冲区对象,实际上是一个可添加缓冲区的容器,可以为其添加纹理或渲染缓冲区对象(RBO)。...FBO 本身不能用于渲染,只有添加了纹理或者渲染缓冲区之后才能作为渲染目标,它仅且提供了 3 个附着(Attachment),分别是颜色附着、深度附着和模板附着。...渲染缓冲区可以用于分配和存储颜色、深度或者模板值,可以用作 FBO 中的颜色、深度或者模板附着。...使用 FBO 作为渲染目标时,首先需要为 FBO 的附着添加连接对象,如颜色附着需要连接纹理或者渲染缓冲区对象的颜色缓冲区。

    2K54

    「Android音视频编码那点破事」第一章,使用SurfaceTexture作为Camera输出

    包括申请的Texture、FBO和PBO都是以状态的形式存在的。当我们向系统申请一个Texture,系统不会直接给你返回一个Texture对象,而是一个编号,FBO和PBO也是一样的。...所以在这里自然是对FBO进行初始化,大致的流程是: 申请两个数组,用来分别保存frameBuffer和frameBufferTexture,需要注意的是他们是一堆孪生兄弟,别看他们的值可能是一样的就以为是一个东西...,他们也有值不一样的时候。...实际上,frameBuffer就是容器,里面又颜色附着点、深度附着点和模板附着点,分别对应纹理对象(颜色缓冲区)、深度缓冲区和模板缓冲区。这里我们只使用颜色缓冲区,也就是常用的纹理对象。...此时FBO还只是一个空壳,至少需要附着一个点才能使用,我们通过GLES20.glFramebufferTexture2D把纹理对象(frameBufferTexture)附着到FBO的颜色附着点,这时,

    1.5K30

    OpenGL与OpenGL在移动端的应用

    frameBuffer:framebuffer对象(通常称为FBO)是颜色、深度和模板缓冲区连接点的集合;描述附加到FBO的颜色、深度和模板缓冲区的大小和格式等属性的状态;以及附加到FBO的纹理和renderbuffer...可以将各种2D图像附加到framebuffer对象中的颜色附着点。这些包括存储颜色值的renderbuffer对象、二维纹理或cubemap面的mip级别,甚至三维纹理中的二维切片的mip级别。...类似地,各种包含深度值的2D图像可以附加到FBO的深度附着点。这些可以包括一个renderbuffer,一个二维纹理的mip级,或者一个存储深度值的cubemap面。...唯一可以附加到FBO模板附着点的2D图像是一个存储模板值的renderbuffer对象。...在这一阶段它接受光栅化处理之后的fragment,color,深度值,模版值作为输入,片元着色器可以抛弃片元,也可以生成一个或多个颜色值作为输出。

    3.3K30

    音视频知识图谱 2022.11

    FBO:帧缓冲区对象 FBO(Frame Buffer Object) 默认的帧缓冲区(Default Frame Buffer):在建立了 OpenGL 的渲染环境后,我们相当于有了一只画笔和一块默认的画布...附着与附件:FBO 并不是一个真正的缓冲区,因为 OpenGL 并没有为它分配存储空间去存储渲染所需的几何、像素数据,它是一个指针的集合,这些指针指向了颜色缓冲区、深度缓冲区、模板缓冲区、累积缓冲区等这些真正的缓冲区对象...,我们把这里的指向关系叫做『附着』。...附着点类型有:颜色附着、深度附着和模板附着。这些附着点指向的缓冲区通常包含在某些对象里,我们把这些对象叫做『附件』。...伽马校正技术的延伸: sRGB 颜色空间 2.2 是大多数 CRT 显示器的平均 Gamma 值。

    1.2K30

    WebGL2系列之引言

    引子 时光荏苒岁月如梭,不知不觉间,青丝变白发,哦不是,应该是WebGL已经发展到了2.0阶段:WebGL2,WebGL2相比WebGL增加了很多新的特性,这些新的特性能够帮助程序开发人员实现更多 更酷...本系列文章将会向读者展示WEBGL2开发与WebGL的区别和WEBGL2的一些重要的新特性进行介绍....---- WebGL2的新特性 WEBGL2的主要新特性包括: (但不限于 可能列举不全,后续会陆续补充) OPENGL ES着色器语言3.0 vertex array objects (VAOs) 三维纹理...multiple render target(MRT) Texture access in vertex shaders 浮点数纹理 深度纹理 texelFetch 采样器对象 一直缓冲对象 同步对象...相比于WebGL有很多新玩意;事实上WebGL2是基于OpenGL ES 3.0,很多新的特性是从OpenGL ES 3.0而来的。

    1.1K20
    领券