`

ESSL着色器编程中内置的运算符与函数

阅读更多

-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单门门禁说明书.pdf

    ### ESSL-098单门门禁控制器使用说明与配置指南 #### 一、产品技术参数 **ESSL-098单门门禁控制器**是一款专为中小型办公室、住宅区、学校等场所设计的门禁解决方案。下面详细介绍其主要技术参数: - **工作电源*...

    javascript指南和函数式编程

    7. **Recursion**:在函数式编程中,递归是一种常见的解决问题的方法,学习如何编写尾递归优化的函数。 通过学习这些内容,开发者不仅能提升JavaScript的编程技巧,还能培养出更清晰的思维模式,写出更简洁、更易于...

    OpenGL着色器详细解析

    在OpenGL ES中,着色器是一种非常重要的组成部分,它允许开发者直接控制图形渲染过程中的细节,从而实现更复杂的视觉效果。 着色器程序主要通过GLSL(OpenGL Shading Language)编写。GLSL是一种类似于C语言的高级...

    opengl es 2.0 GLSL编程规范

    OpenGL ES 2.0 GLSL(OpenGL Shading Language)编程规范是图形编程领域的一个重要参考文档,它详细描述了用于OpenGL ES 2.0环境下的着色器编程语言GLSL ES(OpenGL ES Shading Language)的具体语法和使用规则。...

    《OpenGL ES 2.0编程指南 中文版》.pdf

    OpenGL ES 着色器语言基础、变量和变量类型、构造变量、矢量和矩阵成员、常量、结构、数组、操作器、函数、内置函数、控制语句、表格、属性、变量、预处理程序和指令、表格和变量 pack、精度和限定、恒定。...

    OpenGL ES 2.0 and 3.0 编程指南(中英文)

    2. **固定功能到可编程管线的转变**:与OpenGL ES 1.x相比,2.0取消了许多内置的固定功能,转而支持可编程的图形管线,允许开发者实现自定义图形效果。 3. **纹理和贴图**:OpenGL ES 2.0支持多种纹理格式和过滤...

    OPENGL ES 3.0编程指南 原书第2版 中文版 笔记1

    OpenGL ES 3.0 是移动设备...以上就是OpenGL ES 3.0编程的基本流程,涉及EAGLContext、窗口创建、着色器编译和链接、绘图操作以及EGL接口的使用。在实际开发中,还需要考虑错误处理、资源管理、性能优化等方面的内容。

    OpenGL ES 2.0 编程指南 中文版

    书中深入探讨了OpenGLES着色器语言的基础知识,包括变量和类型、构造函数、向量与矩阵操作、常量、结构体、数组、操作符、内置函数、控制语句、表格和精度限定符等。这些内容帮助读者熟悉OpenGL ES 2.0所使用的GLSL ...

    OpenGL ES 2.0编程指南

    - **属性获取与设置**:通过OpenGL ES 2.0 API获取和设置着色器中的变量。 - **GLSL基础**:介绍了GLSL的基本语法,包括变量类型、运算符、函数等。 #### 六、顶点属性与缓冲区 - **顶点属性**:顶点属性数据包含了...

    OpenGL+ES+2.0+编程指南+中文版

    在着色器编程方面,本书不仅详细介绍了如何创建、编译和链接着色器程序,还深入讲解了OpenGLES着色器语言的基础知识,包括变量和类型、构造器、矢量和矩阵操作、常量、结构体、数组、操作符、函数以及内置函数等。...

    JavaScript ES6函数式编程入门经典_javascript_

    JavaScript ES6函数式编程是现代Web开发中的重要概念,它为开发者提供了更高效、更简洁的编程方式。本文将深入探讨ES6中的函数式编程特性,帮助初学者掌握这一核心技能。 1. **箭头函数**:箭头函数是ES6引入的一种...

    《OpenGL ES 2.0 编程指南 中文版》.pdf

    它与之前的OpenGL ES版本相比,引入了全新的可编程管线,从而允许开发者可以编写自己的顶点和片段着色器。 ### EGL环境配置 EGL是一个用于OpenGL ES和其他图形API的系统库,它负责管理图形渲染上下文和表面(如窗口...

    javaScript函数式编程

    全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多...

    OPENGL ES 3.0编程指南

    在标签中提到的“elasticsearch”、“大数据”和“全文检索”与OpenGL ES 3.0编程没有直接关联,它们属于数据搜索和分析领域。Elasticsearch是一种流行的分布式搜索引擎,用于实时大数据分析和全文检索。它通常与...

    Android之砖块着色器

    1. 着色器:着色器是OpenGL ES(在Android中使用)或 Vulkan API的一部分,负责处理图形渲染的不同阶段。主要有两种类型的着色器:顶点着色器和片段着色器。顶点着色器处理几何数据,而片段着色器则决定每个像素的...

    Qt6 QML Book/图形效果/顶点着色器示例源码

    本篇文章将深入探讨Qt6 QML中的顶点着色器,结合提供的"UntitledProject1"源码实例,解析其工作原理与应用。 一、QML中的图形渲染 QML是Qt提供的一种声明式编程语言,它允许开发者以简洁的语法创建用户界面。在QML...

    OpenGL ES 2.0编程指南中文版

    片段着色器部分讲解了如何在片断着色器中使用贴图,包括固定行为的片段着色器以及ES2.0对片段着色器的限制。片断着色器的行为部分涉及了如何请求额外的缓冲区,以及如何使用帧缓冲区进行颜色、深度和模板测试。 帧...

    opengl大全套,有着色器shading。包含第一版中文,第三版英文版,还有几十个着色器例子。还有opengl红宝书,超级宝典,opengl编程7版

    本资源包集合了OpenGL的学习资料,包括了不同版本的书籍和丰富的着色器示例,对于深入理解并掌握OpenGL编程至关重要。 首先,我们有《OpenGL着色语言》这本书,它介绍了OpenGL Shader Language(GLSL),这是OpenGL...

    awesome-glsl:汇编了学习OpenGL着色器编程的最佳资源

    了解数据类型(如vec3、mat4)和内置函数(如gl_Position、gl_FragColor)是GLSL编程的基础。 4. **WebGL和HTML5**:WebGL是一种基于OpenGL ES 2.0标准的JavaScript API,允许在浏览器中进行3D图形编程。HTML5是...

Global site tag (gtag.js) - Google Analytics