-x : 返回x向量的负值,表示与原向量方向相反的向量。
x+y: 计算向量x和向量y的和,x和y向量必须是同维度的。
x-y: 计算两个向量的差值,两个向量也必须是同维度的。
x*y: 如果x和y都是向量,那么该运算符进行的是逐分量的相乘计算;如果是矩阵相乘,那么该运算符会返回一个线性相乘(线性代数中正常的矩阵乘法)的矩阵,而不是一个逐分量的相乘结果(如果想得到的是逐分量的相乘结果,那就需要使用matrixCompMult函数)。
x/y: 除法运算符与乘法运算符比较相似。
dot(x,y): 返回两个向量的点乘积(标量),这两个向量必须是同维度的。
cross(vec3 x,vec3 y): 返回两个向量的叉乘结果(向量),x和y必须都是vec3类型的向量。
matrixCompMult(mat x,mat y): 返回两个矩阵的逐分量的相乘结果,x和y必须是同维度的(mat2,mat3或mat4)。
mat matrixCompMult (mat x, mat y)矩阵x乘以y,result[i][j]是 x[i][j] 和 y[i][j] 的标量积。注意,要获取线性代数矩阵的乘法,使用乘法操作符*。
normalize(x): 返回向量x的单位矩阵。
reflect(t,n): n是法向量,t是入射向量,返回t轴对称于法向量的反射向量。
clamp(a,b,c): 用于返回a、b、c中的中间值
补充说明:
GLSL 与C/C++类似但是有一些细微的差别。
另外GLSL 具有以下的特点/约束:
GLSL是100%类型安全的。你不能将一个整型不加转换直接传给一个浮点型:
float my_float = 1; // Won’t Work! “1” Is An Integer!
float my_new_float = 1.0; // Will Work!
Casts have to be done using constructors. For example this won’t work:
类型转换必须使用构造器。比如下面的代码:
vec2 my_vec;
ivec2 my_int_vec;
my_vec2 = (vec2)my_int_vec; // Won’t Work Because No Constructor Is Used!
my_vec2 = vec2(my_int_vec); // Will Work!
向量和矩阵只能使用构造器赋值:
vec3 my_vec = vec3(1.0, 1.0, 1.0);
mat3 my_mat = mat3(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0);
向量相乘是按分量逐个作出的乘积:
vec3 my_vec1 = vec3(5.0, 1.0, 0.0);
vec3 my_vec2 = vec3(1.0, 3.0, 4.0);
vec3 product = my_vec1 * my_vec2; // Will Return This Vector: (5.0, 3.0, 0.0)
也可以对向量和矩阵进行相乘。
矩阵* 向量将把向量当做列向量(OpenGL标准)。
向量* 矩阵将把向量当做行向量 (DirectX 标准)。
比如一个顶点以这种方式进行法线变换:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex
这将简单地将顶点的位置通过模型视图投影矩阵变换。也可以使用其他内置的运算子:
dot :点乘
cross :叉乘
texture2D :用于对纹理采样
normalize :对一个向量规格化
clamp :将一个向量固定在一个最小值和最大值之间
表2-3 GLSL的内置函数(部分)
函 数 |
说 明 |
pow() |
幂函数(对矢量和标量 同样有效,下同) |
exp(), log() |
指数函数,对数函数 |
abs() |
绝对值 |
sqrt() |
平方根 |
max(), min() |
最值 |
ceil(), floor() |
取大于实参的最小整数,取小 于实参的最大整数 |
sin(), cos(), tan() |
三角函数 |
asin(), acos(), atan() |
反三角函数 |
sinh(), cosh(),<a>tanh () |
双曲正弦,双曲余弦,双曲正切 (以及相应的反函数) |
length() |
向量长度 |
distance() |
两个向量的距离 |
dot(), cross() |
数乘,叉乘 |
matrixCompMult() |
矩阵对应元素分别相乘 |
transpose(), determinant(), inverse() |
矩阵的转置,行列式,逆 |
lessThan(), greaterThan(), equal() |
小于,大于,等于(对实参向量对应位 置的每个分量做大小比较,生成布尔向量) |
Reference:
http://book.51cto.com/art/201205/338109.htm
http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml
http://blog.csdn.net/hgl868/article/details/7876257#t3
http://www.opengl.org/sdk/docs/manglsl/
相关推荐
### ESSL-098单门门禁控制器使用说明与配置指南 #### 一、产品技术参数 **ESSL-098单门门禁控制器**是一款专为中小型办公室、住宅区、学校等场所设计的门禁解决方案。下面详细介绍其主要技术参数: - **工作电源*...
7. **Recursion**:在函数式编程中,递归是一种常见的解决问题的方法,学习如何编写尾递归优化的函数。 通过学习这些内容,开发者不仅能提升JavaScript的编程技巧,还能培养出更清晰的思维模式,写出更简洁、更易于...
在OpenGL ES中,着色器是一种非常重要的组成部分,它允许开发者直接控制图形渲染过程中的细节,从而实现更复杂的视觉效果。 着色器程序主要通过GLSL(OpenGL Shading Language)编写。GLSL是一种类似于C语言的高级...
OpenGL ES 2.0 GLSL(OpenGL Shading Language)编程规范是图形编程领域的一个重要参考文档,它详细描述了用于OpenGL ES 2.0环境下的着色器编程语言GLSL ES(OpenGL ES Shading Language)的具体语法和使用规则。...
OpenGL ES 着色器语言基础、变量和变量类型、构造变量、矢量和矩阵成员、常量、结构、数组、操作器、函数、内置函数、控制语句、表格、属性、变量、预处理程序和指令、表格和变量 pack、精度和限定、恒定。...
2. **固定功能到可编程管线的转变**:与OpenGL ES 1.x相比,2.0取消了许多内置的固定功能,转而支持可编程的图形管线,允许开发者实现自定义图形效果。 3. **纹理和贴图**:OpenGL ES 2.0支持多种纹理格式和过滤...
OpenGL ES 3.0 是移动设备...以上就是OpenGL ES 3.0编程的基本流程,涉及EAGLContext、窗口创建、着色器编译和链接、绘图操作以及EGL接口的使用。在实际开发中,还需要考虑错误处理、资源管理、性能优化等方面的内容。
书中深入探讨了OpenGLES着色器语言的基础知识,包括变量和类型、构造函数、向量与矩阵操作、常量、结构体、数组、操作符、内置函数、控制语句、表格和精度限定符等。这些内容帮助读者熟悉OpenGL ES 2.0所使用的GLSL ...
- **属性获取与设置**:通过OpenGL ES 2.0 API获取和设置着色器中的变量。 - **GLSL基础**:介绍了GLSL的基本语法,包括变量类型、运算符、函数等。 #### 六、顶点属性与缓冲区 - **顶点属性**:顶点属性数据包含了...
在着色器编程方面,本书不仅详细介绍了如何创建、编译和链接着色器程序,还深入讲解了OpenGLES着色器语言的基础知识,包括变量和类型、构造器、矢量和矩阵操作、常量、结构体、数组、操作符、函数以及内置函数等。...
JavaScript ES6函数式编程是现代Web开发中的重要概念,它为开发者提供了更高效、更简洁的编程方式。本文将深入探讨ES6中的函数式编程特性,帮助初学者掌握这一核心技能。 1. **箭头函数**:箭头函数是ES6引入的一种...
它与之前的OpenGL ES版本相比,引入了全新的可编程管线,从而允许开发者可以编写自己的顶点和片段着色器。 ### EGL环境配置 EGL是一个用于OpenGL ES和其他图形API的系统库,它负责管理图形渲染上下文和表面(如窗口...
全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...
在标签中提到的“elasticsearch”、“大数据”和“全文检索”与OpenGL ES 3.0编程没有直接关联,它们属于数据搜索和分析领域。Elasticsearch是一种流行的分布式搜索引擎,用于实时大数据分析和全文检索。它通常与...
1. 着色器:着色器是OpenGL ES(在Android中使用)或 Vulkan API的一部分,负责处理图形渲染的不同阶段。主要有两种类型的着色器:顶点着色器和片段着色器。顶点着色器处理几何数据,而片段着色器则决定每个像素的...
本篇文章将深入探讨Qt6 QML中的顶点着色器,结合提供的"UntitledProject1"源码实例,解析其工作原理与应用。 一、QML中的图形渲染 QML是Qt提供的一种声明式编程语言,它允许开发者以简洁的语法创建用户界面。在QML...
片段着色器部分讲解了如何在片断着色器中使用贴图,包括固定行为的片段着色器以及ES2.0对片段着色器的限制。片断着色器的行为部分涉及了如何请求额外的缓冲区,以及如何使用帧缓冲区进行颜色、深度和模板测试。 帧...
本资源包集合了OpenGL的学习资料,包括了不同版本的书籍和丰富的着色器示例,对于深入理解并掌握OpenGL编程至关重要。 首先,我们有《OpenGL着色语言》这本书,它介绍了OpenGL Shader Language(GLSL),这是OpenGL...
了解数据类型(如vec3、mat4)和内置函数(如gl_Position、gl_FragColor)是GLSL编程的基础。 4. **WebGL和HTML5**:WebGL是一种基于OpenGL ES 2.0标准的JavaScript API,允许在浏览器中进行3D图形编程。HTML5是...