
GLSL ES 笔记
暮志未晚NAN
这个作者很懒,什么都没留下…
展开
-
14 WebGL 着色器编程语言GLSL ES的预处理指令
GLSL ES支持预处理指令。预处理指令用来在真正编译之前对代码进行预处理,都以井号(#)开始。下面就是我们曾使用的预处理指令。#ifdef GL_ES precision mediump float;#endif这段代码检查了是否已经定义了GL_ES宏,如果是,那就执行#ifdef和#endif之间的部分。这个预处理指令的格式和C语言或JavaScript中的if语句很类似。下原创 2017-05-31 17:15:17 · 4182 阅读 · 1 评论 -
13 WebGL 着色器编程语言GLSL ES的精度限定字
GLSL ES新引入了精度限定字,目的是帮助着色器程序提高运行效率,消减内存开支。顾名思义,精度限定字用来表示每种数据具有的精度(比特数)。简而言之,高精度的程序需要更大的开销(包括更大的内存和更久的计算时间),而低精度的程序需要开销则小得多。使用精度限定字,你就能精细地控制程序在效果和性能间的平衡。然而,精度限定字是可选的,如果你不确定,可以使用下面这个适中的默认值:#ifdef GL_ES原创 2017-05-31 16:36:46 · 2908 阅读 · 0 评论 -
12 WebGL 着色器编程语言GLSL ES的全局变量和局部变量
就像JavaScript和C语言,GLSL ES中也有全局变量和局部变量的概念。全局变量可以在程序中的任意位置使用,而局部变量只能在优先的某一部分代码中使用。在GLSL ES中,如果变量声明在函数的外面,那么它就是全局变量,如果声明在函数内部,那就是局部变量。这和JavaScript与C语言也是一样的。局部变量只能在函数内部使用,因此,由于需要在函数外部访问,下一节中将涉及的attribute原创 2017-05-31 15:18:35 · 2932 阅读 · 0 评论 -
11 WebGL 着色器编程语言GLSL ES的内置函数
接下来的函数将根据函数的功能,有区别地使用参数矢量的各个分量,而不再是简单数值运算函数的逐分量版本。原创 2017-05-31 14:13:53 · 3265 阅读 · 0 评论 -
10 WebGL 着色器编程语言GLSL ES的函数
与JavaScript中函数定义的方式不同,GLSL ES定义函数的方式更接近于C语言,其格式如下:参数的type必须为GLSL ES的类型之一,或者像main()函数这样没有参数也是允许的。如果函数不返回值,那么函数中就不需要有return语句。但这种情况下,返回类型必须是void。你也可以将自己定义的结构体类型指定为返回类型,但是结构体的成员中不能有数组。下面这段代码是一个函数原创 2017-05-31 12:00:55 · 801 阅读 · 0 评论 -
09 WebGL 着色器编程语言GLSL ES的程序流程控制(分支ifelse和循环for)
着色器中的分支与循环与JavaScript或C中的几乎无异。if语句和if-else语句可以使用if语句或if-else语句进行分支判断,以控制程序流程。下面是使用if-else语句的格式:下面是一段使用if-else语句的代码示例:if(distance < 0.5){ gl_FragColor = vec4(1.0,0.0,0.0,1.0);//红色}原创 2017-05-31 11:25:53 · 4927 阅读 · 0 评论 -
08 WebGL 着色器编程语言GLSL ES的运算符优先级
加粗字体表示这些运算符被保留了,供未来版本的GLSL ES使用。原创 2017-05-31 10:43:53 · 669 阅读 · 0 评论 -
07 WebGL 着色器编程语言GLSL ES的取样器(纹理)
将GLSL ES支持的一种内置类型称为取样器(sampler),我们必须通过该类型变量访问纹理。有两种基本的取样器类型:sampler2D和samplerCube。取样器变量只能是uniform变量,或者需要访问纹理的函数,如texture2D()函数的参数。比如:uniform sampler2D u_Sampler;此外,唯一能赋值给取样器变量的就是纹理单元编号,而且你必须使用WebGL方原创 2017-05-31 10:39:16 · 1255 阅读 · 0 评论 -
06 WebGL 着色器编程语言GLSL ES的数组
GLSL ES支持数组类型。与JavaScript中的数组不同的是,GLSL ES只支持一维数组,而且数组对象不支持pop()和push()等操作,创建数组时也不需要使用new运算符。声明数组很简单,值需要在变量名后加上中括号([])和数组的长度。比如: float floatArray[4];//声明含有4个浮点数元素的数组 vec4 vec4Array[2];//声明含有2个原创 2017-05-31 10:17:34 · 4705 阅读 · 0 评论 -
05 WebGL 着色器编程语言GLSL ES的结构体
GLSL ES支持用户自定义的类型,即结构体(structures)。使用关键字struct,将已存在的类型聚合到一起,就可以定义为结构体。比如: struct light {//定义了结构体类型light vec4 color; vec3 position; } light l1,l2;//声明了light类型的变量l1和l2 上面这段代原创 2017-05-31 09:43:21 · 1400 阅读 · 0 评论 -
04 WebGL 着色器编程语言GLSL ES的矢量和矩阵
GLSL ES支持矢量和矩阵类型,这两种数据类型很适合用来处理计算机图形。矢量和矩阵类型的变量都包含多个元素,每个元素是一个数值(整型数、浮点数或布尔值)。矢量将这些元素排成一列,可以用来表示顶点坐标或颜色值等,而矩阵则将元素划分成行和列,可以用来表示变换矩阵。GLSL ES支持多种不同的矢量和矩阵类型,如下:例子:vec3 position;//由三个浮点数元素组成的矢量,比原创 2017-05-27 18:14:48 · 1871 阅读 · 0 评论 -
03 WebGL 着色器编程语言GLSL ES的变量类型、赋值和类型转换、运算符
GLSL ES是强类型语言GLSL ES不像JavaScript,使用var关键字来声明所有变量。GLSL ES要求你具体地指明变量的数据类型。我们在示例程序中用来这种方式声明变量:如:vec4 a_Position; 我们知道,在定义如main()函数这类函数的时候,必须制定函数的返回值。同样,在进行赋值操作(=)的时候,等号两侧的数据类型也必须一样,否则就出错。因此,GLS原创 2017-05-27 16:53:20 · 4073 阅读 · 0 评论 -
02 WebGL 着色器编程语言GLSL ES的数据值类型、变量
数据值类型(数值和布尔值):GLSL支持两种数据值类型。~数值类型:GLSL ES支持整型数(比如0、1、2)和浮点数(比如3.14、29.98、0.23571)。没有小数点(.)的值被认为是整型数,而有小数点的值则被认为是浮点数。~布尔值类型:GLSL ES支持布尔值类型,包括ture和false两个布尔常量。GLSL ES不支持字符串类型,虽然字符串对三位图形语言来说还是有一定原创 2017-05-27 16:03:12 · 990 阅读 · 0 评论