美文网首页OpenGL ES
第十七节—GLSL的常见着色器内建变量和内建函数

第十七节—GLSL的常见着色器内建变量和内建函数

作者: L_Ares | 来源:发表于2020-10-12 17:01 被阅读0次

本文为L_Ares个人写作,如需转载请表明原文出处。

本节主要介绍GLSL中的常见内建变量都有哪些,作用是什么,并不是全部,而是常见。

一、顶点着色器(VertexShader)

1. 顶点着色器的内建变量

(1). gl_VertexID : 这是一个输入的变量,它的作用是保存你输入的每一个顶点的索引值,也就是你输入的每一个顶点的ID。比如你输入的第一个顶点,第二个顶点,第三个顶点。。。等等,都是由它来确认的。它是一个标签,一般情况下都是默认高精度(highp)来修饰的。

(2). gl_InstanceID : 保存当前绘制的是第几个图形的编号。

(3). gl_Position : 保存的是所有运算完成后的,顶点坐标。它是一个高精度(highp)的浮点型的(float)4维向量(vec4)。

(4). gl_PointSize :表示的是每个顶点的大小。点精灵的大小。

(5). gl_FrontFacing : 这是一个bool值,表示的是是否要做前面。

2. 顶点着色器的内建Uniform属性

窗口深度值的范围:gl_DepthRangeParameters

这是一个结构体,结构体内包含了高精度浮点型的近剪切面深度,远剪切面深度,和远近剪切面深度的差值。

struct gl_DepthRangeParameters {
    highp float near;
    highp float far;
    highp float diff;
}

uniform gl_DepthRangeParameters gl_DepthRange;

3. 顶点着色器的内建常量

在这里可以发现,下述的内建常量全部都是const修饰符修饰的,所以很明显是不可以修改的,精度全部都是mediump所以全部都是中精度的,数据类型全部是int,所以全都是整型的 。

(1). 顶点数据的最大量,就是单次可以指定的,最多支持多少个顶点同时输入。
const mediump int gl_MaxVertexAttribs = 16;

(2). 顶点着色器中,最多支持的Uniform修饰的数据是多少。
const mediump int gl_MaxVertexUniformVectors = 256;

(3). 输出的变量的最大数量。
const mediump int gl_MaxVertexOutputVectors = 16;

(4). 最多可以单次使用多少个纹理单元。
const mediump int gl_MaxVertexTextureImageUnits = 16;

(5). 在顶点着色器和片元着色器中,两个一起可以使用的最多的纹理单元的数量
const mediump int gl_MaxCombinedTextureImageUnits = 32;

二、片元着色器(FragmentShader)

1. 片元着色器的内建变量

下面的前三个变量都是只读的!!!

(1). gl_FragCoord : 表示的是片段中的窗口相对坐标。就是片元着色器中,像素点的坐标在屏幕上的一个相对坐标值。

(2). gl_FrontFacing : bool类型,表示的是你当前渲染的这个图形它是正面的还是背面的,是正面的话,可以得到一个true,如果渲染的是背面的话,可以得到一个false

(3). gl_PointCoord : 表示我们在使用点精灵的时候,它会给我们返回一个点精灵的坐标。(点精灵就是点图元,因为我们在OpenGL中构成图形的三个基本图元只有点,线,三角形,分别可以叫点精灵,线精灵,三角形精灵)

(4). gl_FragDepth : 其实这个变量是只写的。表示每一个片元的深度值。就是说,在片元着色器中写入它时,它会覆盖片元的功能深度值。但是我们应该尽量减少手动的写入深度值,因为这样可能会使GPU禁用许多深度值的优化。

2. 片元着色器的内建常量

和顶点着色器一样,片元着色器的内建常量也都是const修饰的,不可修改的常量,也都是mediump中精度的int整形常量。

(1). 片元着色器中的输入变量的最大数量。也就是你给片元着色器设置用来in的变量不能超过15个。
const mediump int gl_MaxFragmentInputVectors = 15;

(2). 片元着色器中的纹理单元的最大数量。记得上面的顶点着色器的纹理单元最大数量和Combined的最大数量吗?

顶点着色器的纹理单元最大数量+片元着色器的纹理单元的最大数量=MaxCombinedTextureUnits

const mediump int gl_MaxTextureImageUnits = 16;

(3). 片元着色器中允许单次输入的最大Uniform修饰的变量数量
const mediump int gl_MaxFragmentUniformVectors = 224;

(4). 多重渲染最多只支持4个。drawbuffer也就是OpenGL ES要向绘制buffer上绘制图形,也就是可绘制buffer,也就是RT(Render Target)。
const mediump int gl_MaxDrawBuffers = 4;

3. 内建函数

常见的内建函数:

(1). dot : 点乘

(2). cross : 叉乘

(3). texture2D : 用于对纹理的采样。也就是获取纹素。

(4). normalize : 对一个向量标准化(规格化)。

(5). clamp : 将一个向量固定在一个范围内,一个最小值和一个最大值之间。超过这个范围的都会取到对应的最小或者最大值。

其他内建函数如图3.1所示:

3.1.png

相关文章

  • 第十七节—GLSL的常见着色器内建变量和内建函数

    本文为L_Ares个人写作,如需转载请表明原文出处。 本节主要介绍GLSL中的常见内建变量都有哪些,作用是什么,并...

  • OpenGL ES 内建变量以及多重纹理渲染计算

    我们用GLSL来编写着色器代码时, 要了解他们的一些内建变量参数的含义. 本文就是对内建变量做一些介绍. 在顶点着...

  • OpenGL ES 着色器

    GLSL 着色器使用GLSL语言写的。 着色器以声明版本号开头,然后是输入、输出变量,uniform变量和main...

  • Python_8_Python内建函数-迭代器

    1. 内建函数 1 2. 内建函数 2 3. 内建函数 3 4. 内建函数 4 5. 内建函数 5 6. 内建函数...

  • GLSL 内建函数汇总

    在编写着色器总会使用到内建函数的时候,这里主要是写自己用到的一些函数进行汇总,不定期更新。更多资源可以访问以下网站...

  • GLSL常用内建函数

    genType可以理解为泛型 genType pow(genType x)genType有点像面向对象中泛型,即如...

  • GLSL常用内建函数

    1. dot 点乘 返回两个单位向量之间夹角的cos值 2. cross 叉乘 3. texture2D 用于纹理...

  • [OpenGL ES] - GLSL

    GLSL(OpenGL Shading Language) 类型 变量修饰符 使用GLSL 设置上下文 着色器程序...

  • Python入门-函数库(模块)

    内建函数和异常 定义内建函数(例如 len,int, range ...)的 _ _builtin_ _ 模块, ...

  • 10-内建函数

    内建函数 已经学过的内建函数: 类型相关 变量相关: 数学相关:abs() 获取一个数值的绝对值sum() 计算一...

网友评论

    本文标题:第十七节—GLSL的常见着色器内建变量和内建函数

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