【笔记】《WebGL编程指南》学习-第6章着色器语言(1-基础)
来源:互联网 发布:mac 印象笔记插件下载 编辑:程序博客网 时间:2024/05/22 01:54
基础
就像很多其他语言一样,使用 GLSL ES 编写着色器程序时,应该注意以下两点:
- 程序是大小写敏感的。
- 每一个语句都应该以一个英文分号结束。
执行次序
对JS而言,一旦脚本加载完成,就从第1行逐行执行解释了。但是着色器程序和C语言更接近,它从 main()函数开始执行的。着色器程序必须有且仅有一个 main()函数,而且该函数不能接受任何参数。
main()函数前的 void 关键字表示这个函数不返回任何值。在JS中,不管一个函数会不会有返回值,你都是直接用 function 关键字来定义它。而在 GLSL ES 中,如果一个函数没有返回值,就必须在定义函数时明确得指定返回值的类型,如果函数没有返回值,也需要用viod 来明确表示这个函数没有返回值。
注释
在着色器程序中,你可以添加注释,而且注释的格式和JS中的注释格式是相同的,所以,GLSL ES 支持以下两种形式的注释。
- 单行注释:// 后直到换行处的所有字符为注释。
- 多行注释:/* 和 */ 之间的所有字符为注释。
数据值类型(数值和布尔值)
GLSL 支持两种数据值类型。
- **数值类型:**GLSL ES 支持整型数(比如0、1、2)和浮点数(比如3.14、29.98、0.23571)。没有小数点的值被认为是整型数,而有小数点的值则认为是浮点数。
- **布尔值类型:**GLSL ES 支持布尔值类型,包括true 和 false 两个布尔常量。
GLSL ES 不支持字符串类型,虽然字符串对三维图形语言来说还是有一定意义的。
变量
前面已经说过,你可以使用任何变量名,只要该变量名符合:
- 只包括 a-z,A-Z,0-9和下划线。
- 变量名的首字母不能使数字
- 不能是下表中所列出的关键字,也不能是下下表中的保留字。但是,你的变量名的一部分可以使它们。比如,变量名 if 是不合法的,但是变量名 iffy 却可以使用。
- 不能以 gl_、webgl_或webgl 开头,这些前缀已经被 OpenGL ES 保留了。
GLSL ES 是强类型语言
GLSL ES 不像 JS,使用 var 关键字来声明所有变量。GLSL ES 要求你具体地指明变量的数据类型,我们在示例程序中用了这种方式声明变量:
<类型> <变量名>
如 vec4 a_Position。
我们知道,在定义如 main()函数这类函数的时候,必须指定函数的返回值。同样,在进行赋值操作(=)的时候,等号左右两侧的数据类型也必须一样,否则就会出错。
因此,GLSL ES被成为强类型语言,你必须时刻注意变量的类型。
基本类型
GLSL ES 支持的基本类型如下表所示。
为变量指定类型有利于 WebGL 系统检查代码错误,提高程序的运行效率。下面是一些声明基本类型变量的例子:
赋值和类型转换
使用等号可以将值赋给变量。我们说过,GLSL ES是强类型语言,所以如果等号左侧的变量类型与等号右侧的值类型不一致,就会出错。
在语义上,8和8.0其实是一个数值。但是,当你将8赋值给浮点型变量 f1 时,确实会出错。而且,你将会看到如下的错误信息:
要将一个整型数值赋值给浮点型变量,需要将整型数转换成浮点数,这个过程成为 类型转换。比如,我们可以使用内置的函数 float()来将整型数转换为浮点数,如下所示:
int i = 8;float f1 = float(i); //将8转换为8.0并赋值给f1float f2 = float(8); //同上
GLSL ES 支持以下几种用于类型转换的内置函数,如下表所示:
运算符
GLSL ES 支持的原酸类型与JS类似,如下表所示:
- 【笔记】《WebGL编程指南》学习-第6章着色器语言(1-基础)
- 【笔记】《WebGL编程指南》学习-第6章着色器语言(2-矢量和矩阵)
- 【笔记】《WebGL编程指南》学习-第6章着色器语言(3-其他)
- 【笔记】《WebGL编程指南》学习-第5章颜色与纹理(1-将非坐标传入顶点着色器))
- 【笔记】《WebGL编程指南》学习-第1章WebGL概述
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(6-改变点的颜色))
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(2-WebGL的HelloWorld)
- 【笔记】《WebGL编程指南》学习-第4章高级变换与动画基础(1-平移然后旋转))
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(1-用canvas画一个蓝色矩形)
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(3-画一个点-版本1))
- 【笔记】《WebGL编程指南》学习-第3章绘制和变换三角形(1-绘制多个点)
- 【笔记】《WebGL编程指南》学习-第7章进入三维世界(1-视点和视线)
- 【笔记】《WebGL编程指南》学习-第8章光照(1-光照原理)
- 【笔记】《WebGL编程指南》学习-第9章层次模型(1-单关节模型)
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(4-画一个点-版本2))
- 【笔记】《WebGL编程指南》学习-第2章WebGL入门(5-通过鼠标点击画点)
- 【笔记】《WebGL编程指南》学习-第3章绘制和变换三角形(2-你好三角形))
- 【笔记】《WebGL编程指南》学习-第3章绘制和变换三角形(4-动画))
- 设计模式_10:观察者模式
- mysql练习语句
- 从键盘传入多个字符串到程序中,并将它们按逆序输出在屏幕上
- Fork/Join框架
- 图片相关操作
- 【笔记】《WebGL编程指南》学习-第6章着色器语言(1-基础)
- ACM输入外挂
- 学习 square 日历框架 android-times-square
- 加一 -LintCode
- C++字符串分割
- 测试之道--网络爬虫系列1
- android开发遭遇jni问题
- Spring MVC 4.2 增加 CORS 支持
- http://www.ityouknow.com/springcloud/2016/12/30/springcloud-collect.html