GLSL ES 语言—函数

函数

GLSL ES 定义函数与 C 语言接近:

返回类型 函数名(类型0 参数0, 类型1 参数1, 类型2 参数2, ..., 类型n 参数n) {	
    函数计算	
    return 返回值;	
}

参数类型必须为前面教程中讲过的一种,或者像 main() 函数一样没有参数。如果函数没有返回值,可以不需要return语句,这种情况下函数的返回类型必须为void。

注意:可以将自己定义的结构体类型指定为返回类型,但结构体的成员中不能有数组。

下面是一个函数,将 RGBA 颜色值转化为亮度值。

float luma(vec4 color) {	
    float r = color.r;	
    float g = color.g;	
    float b = color.b;	
    return 0.2126 * r + 0.7162 * g + 0.0722 * b; 	
}

使用函数:

attribute vec4 a_Color;	
void main() {	
    ...	
    float brightness = luma(a_Color);	
    ...	
}

这里需要注意两点:

  1. 使用函数时传入的参数类型必须与声明函数时指定的参数类型一致。

  2. 在 GLSL 中函数不能在函数内部调用它本身,也就是说不允许递归调用,这项限制的目的是为便于编译器对函数进行内联展开。

规范声明

如果函数定义在调用之后,那么需要提前声明该函数,如下示例:

float luma(vec4); //规范声明	
void main() {	
    ...	
    // luma() 在定义之前被调用	
    float brightness = luma(color);	
}	
float luma(vec4 color) {	
    return 0.2126 * color.r + 0.7162 * color.g + 0.0722 * color.b;	
}

《WebGL编程指南》是入门WebGL的绝佳好书,对了解游戏引擎底层渲染原理大有裨益,「Creator游戏开发社区」公众号计划将书中内容拆解成若干篇的知识点笔记,方便大家在碎片时间学习,邀你一起学习!


640?wx_fmt=jpeg

  1. WebGL学习笔记 | 使用着色器绘制一个点

  2. WebGL学习笔记 | 创建着色器程序

  3. GLSL ES 语言—循环语句for

  4. GLSL ES 语言—分支语句if

  5. GLSL ES 语言—结构体

  6. GLSL ES 语言 | 数组

  7. GLSL 语言—矢量和矩阵 [ ] 运算符

  8. GLSL ES 语言—矢量点(.)运算符

  9. GLSL ES 语言—矢量和矩阵的赋值构造函数

  10. GLSL ES 语言—变量数值类型

640?wx_fmt=png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值