OpenGL ES之GLSL常用内建函数

本文详细介绍了OpenGL ES的GLSL语言中常用的内建函数,包括点乘(dot)、叉乘(cross)、纹理采样(texture2D)、规格化(normalize)、范围限制(clamp)等数学及几何操作函数,以及指数、对数、三角和反三角函数,还涵盖了矩阵运算如矩阵转置(transpose)、行列式(determinant)和逆矩阵(inverse)。这些函数在图形编程中扮演着重要角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • dot 点乘 返回两个单位向量之间夹角的cos值
  • cross 叉乘
  • texture2D 用于纹理采样
  • normalize :对⼀个向量量规格化
  • clamp 将⼀个向量固定在一个最小值和最大值之间
  • pow()幂函数
  • exp() log() 指数函数 对数函数
  • sqrt() 平方根
  • max() min()最大值 最小值
  • ceil() floor(),取大于实参的最小整数,取小于实参的最大整数
  • sin() cos() tan() 三角函数
  • asin() acos() atan() 反三角函数
  • sinh() cosh() tanh() 双曲正弦 双曲余弦 双曲正切
  • asinh() acosh() atanh() 反双曲正弦 反双曲余弦 反双曲正切
  • length() 向量长度
  • distance() 两个向量的距离
  • matrixCompMult() 矩阵对应元素分别相乘
  • transpose() determinant() inverse() 矩阵转置 行列式 逆
  • lessThan() greaterThan() equal() 小于 大于 等于(对实参向量对应位置的每个分量做大小比较,生成布尔向量)
### 关于OpenGL GLSL 函数的文档与实例 #### 文档资源 为了获取有关 OpenGLGLSL (OpenGL Shading Language) 的详尽资料,官方提供了多个版本的语言规范文件。对于不同版本的 OpenGLOpenGL ES 实现所对应的不同版本的着色器语言进行了定义[^1]。 具体来说,《OpenGL 阴影语言规范》4.60 版本涵盖了最新的特性以及向后兼容性说明,并且确保了对早期版本的支持情况。开发者可以通过查阅此份文档来了解各个版本之间的差异及其功能集的变化。 此外,在 Khronos Group 官方网站上也可以找到最新版次的标准文档以及其他辅助材料,比如 SPIR-V 的描述可以在 Khronos API 注册表中获得 1.3.4 版本的信息。 #### 示例代码展示 下面给出一段简单的 GLSL 着色程序片段用于计算光照效果: ```glsl // Vertex Shader Code Example #version 330 core layout(location = 0) in vec3 position; uniform mat4 modelViewProjection; void main() { gl_Position = modelViewProjection * vec4(position, 1.0); } ``` ```glsl // Fragment Shader Code Example #version 330 core out vec4 FragColor; in vec3 Normal; // 法线方向 uniform vec3 lightDir; // 光源方向 uniform vec3 objectColor; // 对象颜色 void main() { float ambientStrength = 0.1; vec3 ambient = ambientStrength * objectColor; float diff = max(dot(Normal, normalize(lightDir)), 0.0); vec3 diffuse = diff * objectColor; vec3 result = ambient + diffuse; FragColor = vec4(result, 1.0); } ``` 上述顶点着色器接收来自应用程序的空间坐标作为输入并将其转换为裁剪空间下的位置;片元着色器则负责处理光照明模型,这里采用了一个基础的漫反射加环境光组合方式[^2]。 #### Uniform 变量设置方法 Uniform 类型变量能够接受任意合法的数据结构形式,包括复杂类型如数组或结构体。针对不同的数据类型,OpenGl 提供了一系列带有适当后缀名的 `glUniform` 方法来进行赋值操作。例如要给定一个三维矢量类型的 uniform 参数,则应当调用 `glUniform3f()` 或者其变种 `glUniform3fv()` 来完成传递工作[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╰つ栺尖篴夢ゞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值