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

音视频技术基础(四)-- OpenGL

由Khronos组织维护的图形库API规范,OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值,接口设计与平台无关。...至于内部具体每个函数是如何实现的,由OpenGL库的开发者自行决定,通常是操作系统厂商或显卡厂商来提供。 OpenGL被设计为只有输出的,所以它只提供渲染功能。...OpenGL管线对OpenGL上下文的操作是通过着色器(shader)来实现,因为GPU中没有默认的顶点/片段着色器,至少需要定义一个顶点着色器和一个片段着色器。...光栅化阶段(Rasterization Stage) 将图元映射为最终屏幕上显示的像素,并生成片段,在片段着色器运行之前会执行裁切(Clipping),以使得显示的像素在屏幕之内。...这个阶段也会检查物体透明度的alpha值并对物体进行混合(Blend)。 为什么OpenGL渲染比较快?

2.2K40

用 OpenGL 对视频帧内容进行替换

带透明度的遮罩图 接下来的事情就是将两张图片融合,分别介绍基于着色器和颜色混合来替换内容。...使用着色器进行替换 在 OpenGL 的渲染管线中,会先构建图形,然后进行光栅化,光栅化后对每一个片元着色,在这个着色过程中可以根据需要对片元进行处理,包括抛弃某些片元等,简单说在 OpenGL 中就是先有形后有色...使用着色器进行替换 使用颜色混合进行替换 使用颜色混合的方式不像着色器那样简单粗暴,要么抛弃某些片元,要么直接覆盖了。 它是根据一定的计算规则,来计算两个颜色之间的融合。...在 OpenGL 中使用颜色混合要设置合理的混合因子。...,如果采用了颜色混合就执行颜色混合的绘制,否则采用着色器的绘制,也体现了就是将遮罩图直接覆盖在原图上的思想。

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

    OpenGL入门

    这也意味着任何时候OpenGL库表现的行为与规范规定的不一致时,基本都是库的开发者留下的bug,这也是为什么总是建议你偶尔更新一下显卡驱动 可以将显卡驱动比喻是显卡的操作系统,是显卡的灵魂 image.png...为什么要用OpenGL?...当使用OpenGL的时候,我们会遇到一些状态设置函数(State-changing Function),这类函数将会改变上下文。...以及状态使用函数(State-using Function),这类函数会根据当前OpenGL的状态执行一些操作。只要你记住OpenGL本质上是个大状态机,就能更容易理解它的大部分特性。...在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。 片段着色器 也叫片元着色器。

    3.5K41

    OpenGL ES初探:渲染流程及GLKit简介

    1.1 简介 OpenGL是一套多功能开放标准库,用于处理可视化2D和3D数据。OpenGL可以将调用函数转换成图形处理命令并传送给底层图形硬件,因此OpenGL的绘制效率非常快。...,主要包括以下几步: 1、顶点着色器进行旋转、平移、缩放的矩阵变换,以及对光照进行设置,之后输出数据 图元装配:确定图形显示为什么形状,点、线或者三角形 光栅化:将图元转换为二维信息,因为屏幕是二维的...、混合等操作 像素归属测试:确定帧缓冲区中的像素是否归属于OpenGL ES上下文所有;例如两个view在一个像素点上有重叠,则在下面的view的像素点会被判定不属于OpenGL ES的Context所有...,并且上层view存在透明度,则会进行混合,产生一个新的颜色值,因为一个像素只能显示一种颜色 1.3 EGL OpenGL ES API没有提供如何创建渲染上下文或者上下文如何链接到原生窗口。...GLKit框架提供了功能和类,可以减少创建新的基于着色器的应⽤用程序所需的⼯工作量量,或者⽀持依赖早期版本的OpenGL ES或OpenGL提供的固定函数顶点或片段处理理的现有应用程序。

    2.1K40

    一看就懂的 OpenGL 基础概念丨音视频基础

    当使用 OpenGL 的时候,我们会遇到一些状态设置函数(State-changing Function),这类函数将会改变上下文。...以及状态使用函数(State-using Function),这类函数会根据当前 OpenGL 的状态执行一些操作。只要你记住 OpenGL 本质上是个大状态机,就能更容易理解它的大部分特性。...混合则是计算带有透明度的片段的最终颜色,在这个阶段会与显示在它背后的片段的颜色按照透明度进行叠加行成新的颜色,通俗讲就是形成透明物体的效果。...混合 由图可以看出,通过混合,右边的窗户既有部分自己的颜色,又有窗户里面物体的部分颜色,就是两者透明度按照比例叠加的结果。 于是走完整个渲染管线流程,我们的渲染工作就算是告一段落了。...最后把被挡住的或者我们不想显示的区域的下片段丢弃,并且对有透明度的片段进行前后片段颜色的混合。

    3.1K20

    OpenGL 滤镜进阶(缩放+灵魂出窍+抖动+闪白+毛刺+幻觉)

    ,并且上面的那层随着时间的推移,会逐渐放大且不透明度逐渐降低 片元色器算法流程: 定义一次效果时长0.7,叠加层最大透明度,叠加层最大的放大倍率 计算叠加层当前时间下在周期变化的进度 progress...= mod(Time, duration) / duration 计算当前时间下的叠加层的透明度、放大倍率 计算缩小后的纹理坐标 获取叠加层的纹素和原纹素 将原纹理和放大后的纹理进行颜色混合 放大原理...Shake.fsh 闪白 原理 片元着色器 :添加⽩色图层 ,⽩色图层的透明度随着时间变化 片元着色器算法 通过mod函数计算当前时间戳对应的时间周期 设置一个白色遮罩 计算白色遮罩的振幅,振幅范围是...[0,0, 1.0] 获取原图纹理的纹素,并与白色遮罩颜色混合 颜色混合的方式有多种,常用的一般是mix函数或者默认的混合方程式:mask*(1-alpha) + weakMask*alpha 片元着色器...最终呈现的效果是:绝大部分的⾏都会进⾏行微⼩的偏移,只有少量的行会进行较大偏移 片元着色器算法步骤 mod函数计算时间周期 计算振幅,范围是「0, 1] 获取像素点随机偏移值,范围是[-1,1] 判断是否需要偏移

    1.6K31

    Metal(一)-简述 & 主要APIMetal(一)-简述 & 主要API

    和OpenGL中的图形管道相比相似度非常高; 顶点处理:物体矩阵、世界矩阵、观察者矩阵(相当于MVP),裁剪 图元装配方式:点、线、线环、三角形、三角形带 片段处理:纹理、模板、透明度、混合 Cpu:...OpenGl 可以对照这幅图回忆一下自己的知识结构和OpenGLES中的知识点。...图二 两张图可以对比来看 ?...指定用于顶点和片元函数输入和输出的资源,并在对应的参数中设置每个资源的位置(即索引),即将顶点数据等通过commandEncoder调用setVertexBytes:length:atIndex:函数传递到...metal shader Language文件的顶点着色器和片元着色器函数 指定其他的固定功能状态,例如通过commandEncoder调用setViewport:函数设置视口大小等 绘制图形 调用endEncoding

    2K10

    OpenGL 图形渲染流程入门

    所有这些阶段都是高度专门化的(它们都有一个特定的函数),并且很容易并行执行。...在这个阶段会把图元映射为最终屏幕上相应的像素,生成供片段着色器 (Fragment Shader) 使用的片段 (Fragment)。在片段着色器运行之前会执行裁切 (Clipping)。...片段着色器 在片段着色器阶段的主要目的是计算一个像素的最终颜色,这也是所有 OpenGL 高级效果产生的地方。...它将当前面片的 alpha 通道值(透明度)作为混合因子,参与该面片本身的颜色与颜色缓冲区中本身颜色的混合。需要注意的是,alpha 混合过程中需要关闭深度写入,但不关闭深度测试。...3、参考文章 卡通渲染(上‍)‍ 光栅化阶段:三角形设置、三角形遍历、像素着色、合并 OpenGL - 渲染流程 透明度测试和透明度混合 紧追技术前沿,深挖专业领域 扫码关注我们吧!

    2.7K10

    今天的技术干货由 ChatGPT 买单了~~

    在渲染半透明物体时,需要将物体的颜色和不透明度进行混合,从而产生半透明的效果。...,并将混合函数设置为GL_SRC_ALPHA/GL_ONE_MINUS_SRC_ALPHA混合函数。...在渲染半透明物体时,深度测试会导致物体的混合效果不正确,因为深度测试会遮挡掉部分半透明物体,从而影响混合的结果。...在渲染半透明物体时,还需要注意以下几点: 尽量减少半透明物体的数量,以避免过多的混合计算影响性能。 根据物体的不透明度设置不同的混合参数,以提高渲染效率和视觉效果。...在使用透明纹理(Transparent Texture)时,需要将纹理的Alpha通道与物体的不透明度进行混合计算,以产生正确的半透明效果。

    46060

    用纹理增加细节

    一.理解纹理   OpenGL中的纹理可以用来表示照片,图像。每个二维的纹理都由许多小的纹理元素组成,他们是小块的数据,类似于我们前面讨论的片段和像素。要使用纹理,最直接的方式是从图像文件加载数据。...我们会通过glTexParameteri()函数设置纹理过滤模式,下面是OpenGL支持的纹理过滤模式:    并且放大和缩小两种情况下所允许的纹理过滤模式有所不同,如下所示:    下面,是加载纹理的代码...被插值的纹理坐标和纹理数据被传递给着色器函数texture(),它会读入纹理中那个特定坐标处的颜色值,然后把结果赋值给fragColor,以便设置片段的颜色。...我们需要注意的是S轴的方向是向右为正的,范围是从0到1,T轴是向下为正的,范围也是从0到1。我们还使用了0.1和0.9作为T的坐标,为什么?...我们也会创建一个基类作为他们的公共函数,我们不需要画中间那条线,因为那是纹理的一部分,类的继承结构如下:    我们先给ShaderHelper类中加入一个函数用于编译着色器并链接成OpenGL程序,代码如下

    31510

    Flash图片处理 图像处理 效果 滤镜 pixelbender blender mode

    image.png image.png 1 各种Filter类 斜角滤镜(BevelFilter 类) 可创建立体效果的文字或图像 模糊滤镜(BlurFilter 类) 对文字或图片进行模糊处理...、对比度、饱和度、色相 卷积滤镜(ConvolutionFilter 类) 可实现图片的锐化、边缘、雕刻效果 置换图滤镜(DisplacementMapFilter 类) 可实现两张图片之间的切换效果...旧照片:(网上搜集回来的,具体为什么这么计算,太难考究) [0.3930000066757202, 0.7689999938011169, 0.1889999955892563, 0, 0, 0.3490000069141388...但我们还是可以google到一些零星的例子,例如接下来要展示的LOMO效果: image.png image.png      上边4个图,分别就是几步操作的结果,详细参考: http://bbs...这个在toolkit中很方便使用,会自动生成相应的控制条。 基本控制:if else。没有for while什么的 如何在as中使用。

    1.5K20

    unity3d:Shader知识点,矩阵,函数,坐标转换,Tags,半透明,阴影,深度,亮度,优化

    通常情况下,Unity会自动为内置的着色器提供这些变量,但如果你使用自定义着色器,可能需要手动传递这些变量。...因此,如果V2F结构体中的变量过多,可能会导致寄存器数量不足的问题。 在OpenGL ES 2.0和OpenGL Core Profile中,片段着色器的最大寄存器数量是有限制的。...Transparent(透明):3000 适用于透明物体的渲染,如玻璃、水、烟雾等。这个Queue值会根据物体的透明度和排序模式决定绘制顺序。...为什么需要ZWrite Off,不关闭会怎样 在渲染透明物体时,透明物体后面的物体不会被遮挡,从而达到正确的透明效果。...为什么不关闭ZTest 要注意的是,透明度混合只关闭了深度写入,但没有关闭深度测试。

    1.3K10

    OpenGL与OpenGL在移动端的应用

    image.png 2.layer,OpenGLES的描绘必须在CAEAGLLayer上才能显示出来,所以我们需要重写这个函数,修改view默认的layer返回类型,从CAEAGLLayer可以看出,它也属于...,眼睛可能会动,则看到的物体也可能会变化。...image.png 我们可以看到图中茶壶先旋转再平移与先平移再旋转最终的结果是不一样的,因为它都是基于物体本身,学过线性代数我们会知道矩阵乘法不满足交换律。...如我是做iOS开发的,以前接触的图形上的东西就是view、layer这种,学了openGL后,会明白layer原来也是OpenGL ES的基本图元——两个三角形绘制而成。...截屏2019-11-07下午8.32.41.png 如下两图是苹果渲染绘制框架的变化(OpenGL ES -> Metal) ? image.png ?

    3.2K30

    OpenGL 颜色混合丨音视频基础

    这篇文章是音视频基础主题专栏中关于 OpenGL 颜色混合的探讨。 混合是什么呢?混合就是把两种颜色混在一起。...OpenGL 一次渲染过程包含了多个阶段,包括顶点着色器、图元组装、栅格化、片元着色器、测试和混合等,最后将结果输出到 FrameBuffer 上。渲染管线最后一个阶段就是混合。...默认情况下 OpenGL 的颜色混合就是关闭的,这时候需要注意:颜色透明通道这个参数,即颜色的 alpha 值,是不起作用的。...glBlendFunc 函数的参数可以理解为混合因子,第一个参数代表源颜色混合因子,第二个参数代表目标颜色混合因子。...对于没有预乘的图片,我们做混合情况下需要使用 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),这种方式会进行源颜色乘法。 - 完 -

    95820

    Qt5 和 OpenCV4 计算机视觉项目:6~9

    -bgcolor自变量用于指定感兴趣对象的图像的背景色。 背景色表示透明色,在生成样本时将被视为透明色。 我们在这里使用的感兴趣图像的背景是黑色,因此在这里使用零。...为什么我们的结果慢 100 倍? 性能可能会飙升至 45 FPS,但这是在 GPU 而非 CPU 上测得的。 深度神经网络需要大规模的计算,这不适合在 CPU 上运行,但很适合在 GPU 上运行。...片段着色器:此阶段用于着色光栅化阶段中的片段。 像顶点着色器阶段一样,OpenGL 在此阶段不提供默认的着色器程序,因此我们应该自己编写一个。 混合:此阶段在屏幕或帧缓冲区上渲染 2D 图形。...除此之外,我们在一开始就调用initializeOpenGLFunctions方法来初始化 OpenGL 函数包装器。 另一个区别是我们将着色器代码移到单独的文件中,以提高着色器程序的可维护性。...这些类的使用也非常方便,但与最新版本的 OpenGL 相比可能会(或将会)落后一些。 使用 OpenGL 过滤图像 到目前为止,我们已经学习了如何在 OpenGL 中绘制一个简单的三角形。

    3.7K30

    【前端er入门Shader系列】01—从渲染管线了解Shader

    GLSL(OpenGL Shading Language) 是 OpenGL 中编写 Shader 的一门 GPU 编程语言,Shader 编程的核心就是使用 GLSL 编写顶点着色器和片断着色器,优秀的...测试与混合:虽然片元着色器输出了颜色缓冲,但现实 3D 场景还需要考虑远近遮挡、半透明物体透视等因素,所以必须经过模板、深度和混合测试后才能最终输出颜色缓冲。...(3) 混合测试(Blend test) 对于半透明的物体,颜色值中会使用 a 分量表示透明度,例如 0.2 表示保留 20% 本体颜色,剩下 80% 使用物体背后的颜色,无法简单用片段的保留/丢弃的方式完成半透明物体渲染...,因此需要混合测试,它会将当前像素的值按照设定的混合方式,与目标颜色缓冲区的值进行融合。...开启后的渲染顺序为:优先从近向远渲染不透明物体,渲染过的像素视为遮挡跳过,然后从远向近混合渲染透明的物体且不开启深度测试。颜色缓冲区的最终值会被渲染到屏幕上。 5.

    1.1K22

    OpenGL入门

    这也意味着任何时候OpenGL库表现的行为与规范规定的不一致时,基本都是库的开发者留下的bug,这也是为什么总是建议你偶尔更新一下显卡驱动 可以将显卡驱动比喻是显卡的操作系统,是显卡的灵魂 为什么要用...当使用OpenGL的时候,我们会遇到一些状态设置函数(State-changing Function),这类函数将会改变上下文。...以及状态使用函数(State-using Function),这类函数会根据当前OpenGL的状态执行一些操作。只要你记住OpenGL本质上是个大状态机,就能更容易理解它的大部分特性。...在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。 片段着色器 也叫片元着色器。...这需要使用到一些数学知识,这里可以参考OpenGL官网译文 其他3D术语: 2D+透视 = 3D 纹理贴图:将纹理图片附着到你绘图的图像上 混合:颜色混合效果 渲染:表示计算机从模型创建最终图像的过程

    2.9K40

    OpenGL ES实践教程(五)多重纹理实现图像混合

    有几点前提: 尽量少消耗CPU; 合成的数据是用于推流; 图片大小不一致; 说说如果没有上述几点前提下,可能的方案: 1、使用UIKit,新建一个透明的View,大小和原图像一致,在View上面对应的位置添加图像...本文探究如何使用OpenGL ES实现两个图片的混合。...核心思路 自定义shader,传入两个纹理和对应矩形的坐标; 在像素着色器内判断当前点的范围,如果处于对应矩形内,则进行混合操作; 效果展示 ?...####4、实现着色器 顶点着色器较为简单,只需把顶点数据转成varying变量,传给像素着色器即可; 像素着色器,收到顶点着色器传过来的varyOtherPostion顶点数据,判断当前点是否在leftBottom...先绘制原来的图像,再绘制新的图像,通过`gl_LastFragData `来混合。 ***有兴趣的来一份数据,弄个demo玩玩!!***

    3.6K40

    基础渲染系列(十一)——透明度

    片段是完全不透明的,或者是完全透明的。如果它是透明的,那么根本就不会渲染。这使得可以在某表面上切孔。 要中止渲染片段,可以使用clip函数。如果此函数的参数为负,则片段将被丢弃。...GPU不会混合其颜色,也不会写入深度缓冲区。如果发生这种情况,我们不必担心所有其他材质特性。因此,尽早clip是最有效的方法。在我们的例子中,那是MyFragmentProgram函数的开始。...(变化Alpha cutoff值) 着色器编译器将剪辑转换为丢弃指令。这是相关的OpenGL Core代码片段。 ? 这是Direct3D 。 ? 那阴影呢?...因此,必须以其他方式绘制透明的几何图形。首先绘制最远的对象,最后绘制最接近的对象。这就是为什么透明的东西比不透明的东西要贵得多的原因。 为了确定几何图形的绘制顺序,Unity使用其中心的位置。...这就是为什么它被称为Fade模式。 ? (淡入红色以及白色的高光) 此模式适用于许多效果,但不能正确表示实体半透明表面。例如,玻璃实际上是完全透明的,但也具有清晰的高光和反射。

    4.8K20
    领券