美文网首页
OpenGL ES Shader

OpenGL ES Shader

作者: longMountain | 来源:发表于2018-11-22 12:19 被阅读8次

    Shader(着色器)是用着色语言写的,基于 C 语言的程序。OpenGL 着色语言,或者叫 GLSL(OpenGL Shader Language)是本文重点介绍的对象。

    着色器

    在 OpenGL ES 中你必须创建两种着色器:顶点着色器(vertex shaders)片段着色器( fragment shaders)。这两种着色器是一个完整程序的两半。

    顶点着色器定义了在 2D 或者 3D 场景中几何图形是如何处理的。一个顶点指的是 2D 或者 3D 空间中的一个点。在图像处理中,有 4 个顶点:每一个顶点代表图像的一个角。顶点着色器设置顶点的位置,并且把位置和纹理坐标这样的参数发送到片段着色器。
    然后 GPU 使用片段着色器在对象或者图片的每一个像素上进行计算,最终计算出每个像素的最终颜色。图片,归根结底,实际上仅仅是数据的集合。图片的文档包含每一个像素的各个颜色分量和像素透明度的值。因为对每一个像素,算式是相同的,GPU 可以流水线作业这个过程

    顶点着色器

    一个基础的顶点着色器

    attribute vec4 position;        // =>  顶点,-1.0 到 1.0
    attribute vec4 inputTextureCoordinate; // =>  纹理坐标,0.0 到 1.0
     
    varying vec2 textureCoordinate;   // 顶点着色器负责和片段着色器共享信息:顶点着色器现在正在处理哪个像素
     
    void main()  
    {
        gl_position = position;   // 内建的变量
        textureCoordinate = inputTextureCoordinate.xy; // 顶点中纹理坐标的 X 和 Y 的位置
    }
    
    片段着色器

    最简单的片段着色器:一个直通滤镜

    varying highp vec2 textureCoordinate;
     
    uniform sampler2D inputImageTexture;
     
    void main()  
    {
        gl_FragColor = texture2D(inputImageTexture, textureCoordinate);
    }
    

    GLSL 数据类型和运算

    输入,输出
    • Uniforms 为在一个渲染循环里不变的输入值设计的,在顶点着色器和片段着色器里都可以被访问
    • Attributes 仅可以在顶点着色器被访问。随着每一个顶点不同而会发生变动
    • Varyings 在顶点着色器和片段着色器都会出现。用来在顶点着色器和片段着色器传递信息。

    向量

    vec2,vec3,vec4 分别包含两个,三个,四个浮点数
    在图像处理过程中,一个你可能想持续追踪的事情就是每个像素的 RGBA 值。这些可以被存储在 vec4中。

    矩阵

    mat2,mat3,mat4 分别保存相当于两个,三个,四个 vec2 对象(或者四个,九个,十六个浮点数)的值

    相关文章

      网友评论

          本文标题:OpenGL ES Shader

          本文链接:https://www.haomeiwen.com/subject/pogkqqtx.html