GLSL用于图像处理

这篇具有很好参考价值的文章主要介绍了GLSL用于图像处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Pipeline

硬件处理顶点和片段的Pipeline

GLSL用于图像处理,图像处理,OpenGL
GLSL用于图像处理,图像处理,OpenGL

软件的输入

  1. 顶点着色器
    GLSL用于图像处理,图像处理,OpenGL

顶点的glsl

输入–特殊全局变量

变量 类型 指定函数 描述
gl_ Vertex vec4 glVertex 顶点的全局空间坐标
gl_Color vec4 glColor 主颜色值
gl_SecondaryColor vec4 glSecondaryColor 辅助颜色值
gl_Normal vec4 glNormal 光照法线
gl_MultiTexCoordn vec4 glMultiTexCoord(n, .); 纹理单位n的纹理坐标,n 的取值范围是0~7
gl_FogCoord float glFogCoord 雾坐标
gl_ VertexID int 自上次染调用开始,当前顶点的索引
gl_InstanceID int glDrawArraysInstanced/glDrawElementsInstanced 相关图元的实例ID

输出–特殊全局变量

变量名 .类型 描述
gl_Position vec4 经过变换的顶点位置(在视觉坐标中)
gl_PointSize float 顶点的点大小
gl_ClipVertex Vec4 在用户定义的裁剪平面中使用的顶点位置。这个值必须与裁剪平面使用
相同的坐标系统:视觉坐标或物体坐标

使用了attribute对gl_Position 进行赋值,可以定义三维矩形。

可变 – 表15-16顶点着色器varying全局变量

变量名 类型 描述
gl._FrontColor vec4 用于图元正面的主颜色
gl_BackColor vec4 用于图元背面的主颜色
gl_FrontSecondaryColor vec4 用于图元正面的辅助颜色
gl_BackSecondaryColor vec4 用于图元背面的辅助颜色
gl_TexCoord[n] vec4 第n个纹理坐标值
gl_FogFragCoord vec4 片断雾坐标值

总结
用于图像处理时,
使用 gl_Position 获取外部参数定义顶点提供多边形坐标。(长方形三维坐标)
使用 可变变量 vTexCoord 获取外部参数,为后面 片段处理 fragment 提供多边形坐标。这里必须一级一级的传递到fragment 。(长方形二维坐标)

  1. fragment 片段着色器
    GLSL用于图像处理,图像处理,OpenGL
    输入 – 表15-18片断着色器的varying全局变量
变量 类型 描述
gl_FragCoord vec4 (只读)片断的位置,包括z成分,它表示固定功能所计算的深度值
glFrontFacing bool (只读)指定了这个片断是否属于一个正面图元
gl_Color vec4 片断的主颜色
gl_SecondColor vec4 片断的辅助颜色
gl_TexCoord[n] vec4 片断的第n纹理坐标
gl_FogFragCoord float 片断的雾坐标,要么指定为视觉空间中的图元的z坐标,或者插值雾
坐标
gl_PointCoord vec2 个点块纹理的片断位置在[0.0,1.0]的范围中。如果当前图元并不是
点块纹理或点块纹理被禁用,这个值就是未定义的

输出 – 表15-19片断着色器的输出全局变量

类型 捕述
gl_FragColor vec4 片断的最终颤色
gl_FragDepth float 片断的最终深度
gl_Frag Data[n]vet4 写人到第口个数据缓冲区的数据值

总结
用于图像处理时:
使用gl_FragColor,对逐个color赋值。

代码实例

const char vertex_shader_fix_bk[] =
// 顶点着色器
"attribute vec4 position; \
attribute vec2 texCoord; \
varying vec2 vTexCoord; \
void main() { \
    gl_Position = position; \
    vTexCoord = texCoord; \
}";

// 实现图片融合,这里简单地使用了线性混合
const char fragment_shader_simple_bk[] =
"precision mediump float; \
varying vec2 vTexCoord;  \
uniform sampler2D texture1; \
uniform sampler2D texture2; \
void main() { \
    vec4 color1 = texture2D(texture1, vTexCoord); \
    vec4 color2 = texture2D(texture2, vTexCoord); \
    vec4 blendedColor = mix(color1, color2, 0.5); \
    gl_FragColor = blendedColor; \
} \
";

脚本上看:

  1. 顶点脚本:从外部传入 position,texCoord用于定义四边形。position定义四边形顶点,texCoord为后续的处理传递顶点数据。
  2. fragment 脚本:从外部传入texture1,对各个点颜色逐步blending。
  3. 两个脚本的连接桥梁是 varying vec2 vTexCoord; varying变量会自动插值,生成中间所有的坐标。

关于varying变量

varying是一个在OpenGL中使用的关键字,用于在顶点着色器和片段着色器之间传递数据。它用于声明在顶点着色器中计算的数据,以便在片段着色器中使用。 
 
在顶点着色器中,我们可以声明一个varying变量,并将其赋值为顶点属性或其他计算结果。这些varying变量的值会在顶点着色器和片段着色器之间进行插值,以便在片段着色器中获取每个片段的插值数据。 
 
例如,我们可以在顶点着色器中声明一个varying vec2类型的变量vTexCoord,将它赋值为纹理坐标数据。然后,在片段着色器中,我们可以使用这个vTexCoord变量来获取每个片段的纹理坐标值,以进行纹理采样和纹理映射操作。 
 
varying类型的变量在顶点着色器和片段着色器之间起到了数据传递的作用,使得我们可以在渲染过程中使用顶点数据和插值数据进行各种计算和处理。
    // 设置顶点坐标, 这里用全图
    GLfloat vertices[] = {
        -1.0f, 1.0f, 0.0f,      // 左上角
        -1.0f, -1.0f, 0.0f,     // 左下角
        1.0f, -1.0f, 0.0f,      // 右下角
        1.0f, 1.0f, 0.0f        // 右上角
    };

    // 设置纹理坐标, 这里用全图
    GLfloat texCoords[] = {
        0.0f, 1.0f,     // 左上角
        0.0f, 0.0f,     // 左下角
        1.0f, 0.0f,     // 右下角
        1.0f, 1.0f      // 右上角
    };
    // 设置顶点和纹理坐标数据
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
    glEnableVertexAttribArray(1);
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, texCoords);

    // draw something
    // 将两个RGB数据分别上传到纹理对象:
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, gl_view_width, gl_view_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, inRGBData);

上面主要准备数据。文章来源地址https://www.toymoban.com/news/detail-637587.html

到了这里,关于GLSL用于图像处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像处理之《用于统一源跟踪和深度伪造检测的深度可分离水印SepMark》论文精读

    一、文章摘要 恶意的Deepfakes导致了一场关于区分真脸和伪造脸的激烈冲突。尽管已经制定了许多事后检测Deepfakes的对策,但毫无疑问,在可预见的操作之前,被动取证没有考虑对原始人脸采取任何预防措施。为了完成这个取证生态系统,我们提出了名为SepMark的主动式解决方

    2024年01月23日
    浏览(49)
  • Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)

    提示:本系列文章的索引目录在下面文章的链接里(点击下面可以跳转查看): Qt OpenGL 核心模式版本文章目录 冯一川注:GLSL其实也是不断迭代的,比如像3.3版本中,基本数据类型浮点型只支持float型,而GLSL4.0版本开始就有double型数据的支持了,所以本系列GLSL部分以GLSL4.5版

    2024年02月08日
    浏览(37)
  • 第三章 OpenGL ES 基础-基础-GLSL渲染纹理

    第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标 第二章 OpenGL ES 基础-GLSL语法简单总结 第三章 OpenGL ES 基础-GLSL渲染纹理 第四章 OpenGL ES 基础-位移、缩放、旋转原理 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵 第六章 OpenGL ES 基础-FBO、VBO理解与运用 第七章 OpenGL ES 基础-输入

    2024年03月18日
    浏览(31)
  • OPENGL ES 2.0 知识串讲 (6)——GLSL 语法(IV)

    上面两节,主要讲解了 GLSL 中变量和函数的定义语法和使用语法,现在我们可以在 shader 中自定义一些我们所需要用到的变量和函数。但是在 shader 中, 还存在着一些内置的变量和函数。这些变量主要是用于将 Shader 计算得到的值传给 GPU,完成 Shader 在 Pipeline 中的功能。由于我们使

    2024年02月02日
    浏览(74)
  • 基于OpenCV的传统视觉应用 -- OpenCV图像处理 图像模糊处理 图像锐化处理

    图像处理是用计算机对图像进行分析,以获取所需结果的过程,又称为影像处理。图像处理一般是指数字图像的处理。数字图像是用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。 均值滤波是指任意一点的像素

    2024年02月07日
    浏览(46)
  • 彩色图像处理之彩色图像直方图处理的python实现——数字图像处理

    彩色图像的直方图处理是一种重要的图像处理技术,用于改善图像的视觉效果,增强图像的对比度,或为后续的图像处理任务(如图像分割、特征提取)做准备。彩色图像通常由红色(R)、绿色(G)、蓝色(B)三个颜色通道组成,因此彩色图像的直方图处理相比单色图像更

    2024年01月23日
    浏览(48)
  • 数字图像处理实验——数字图像处理初步

    一、实验目的与要求 1.熟悉及掌握在MATLAB中能够处理哪些格式的图像; 2.熟练掌握在MATLAB中如何读取图像及图像的属性信息(大小、颜色、亮度(灰度)、宽度、高度等); 3.掌握如何在MATLAB中按照指定要求存储一副图像的方法; 4.了解图像的算术运算在数字图像中的初步应

    2024年02月04日
    浏览(35)
  • 数字信号与图像处理实验三:图像处理基础与图像变换

    ​ 通过本实验加深对数字图像的理解,熟悉MATLAB中的有关函数;应用DCT对图像进行变换;熟悉图像常见的统计指标,实现图像几何变换的基本方法。 ​ 选择两幅图像,读入图像并显示,同时使用Matlab计算图像的大小,灰度平均值、协方差矩阵、灰度标准差和相关系数。 DC

    2024年02月04日
    浏览(47)
  • 数字图像处理第六章——彩色图像处理

    目录 引言 一、彩色基础 二、彩色模型 2.1 RGB彩色模型 2.2 CMY和CMYK彩色模型  2.3 HSI彩色模型 三、伪彩色图像处理 3.1 灰度分层 3.2 灰度到彩色的变换 四、彩色变换 ​编辑色调与色彩校正 五、平滑与锐化 5.1 平滑 5.2 锐化         在图像处理中,彩色的运用受两个主要因素

    2024年02月09日
    浏览(36)
  • Matlab图像处理基础(1):图像表示,点处理

    目录 0. 概要 1. 图像表示 Image Representation 1.1 图像格式 Image format 1.2 图像分辨率 resolution of image 1.3 图像的编码 1.4 Matlab图像加载、显示和保存  1.5 Image Information 1.6 图像格式转换 1.7 其它类型的像素 1.8 像素数值格式 1.9 图像数据的访问和引用 3. 点处理 Point Processing 3.1 关于像

    2023年04月08日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包