OpenGL ES Shader

2018-11-22  本文已影响8人  longMountain

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 数据类型和运算

输入,输出

向量

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

矩阵

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

上一篇下一篇

猜你喜欢

热点阅读