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

2 篇文章 0 订阅
1 篇文章 0 订阅

-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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值