OpenGL ES 2.0 笔记 - 着色语言的内置函数

2024-03-06 22:48

本文主要是介绍OpenGL ES 2.0 笔记 - 着色语言的内置函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

着色语言的内置函数

  • 简单的数学函数
    abs(求模) floor(取整)

角度转换与三角函数

内置函数签名说明
genType radians(genType degrees)此函数功能将角度转换为弧度
genType degrees(genType radians)此函数功能将弧度转换为角度
genType sin(genType angle)此函数为标准的正弦函数,返回值范围[-1, 1],单位:弧度
genType cos(genType angle)此函数为标准的余弦函数,返回值范围[-1,1],单位:弧度
genType tan(genType angle)此函数为标准的正切函数,返回值单位:弧度
genType asin(genType x)此函数为反正弦函数,返回值是[- π2 , π2 ], x的取值范围[-1,1]
genType acos(genType x)此函数为标准反余弦函数,返回值范围[- π , π ], x的取值范围[-1,1]
genType atan(genType y, genType x)此函数为标准的反正切函数,其返回值是[- π , π ]
genType atan(genType y_over_x)此函数为反正切函数,返回值范围[- π2 , π2 ]

特别说明:上述表格中genType代表的数据类型有float,vec2,vec3以及vec4.float指的是浮点数标量.

指数函数

内置函数签名说明
genType pow(genType x, genType y)此函数返回x的y次方 xy
genType exp(genType x)此函数返回e(数学常数,值近似2.718281828)的x次方,即 ex
genType log(genType x)返回 logex
genType exp2(genType x)返回 2x
genType log2(genType x)返回 log2x
genType sqrt(genType x)返回x的平方根, x
genType inversesqrt(genType x)返回x正平方根的倒数,即 1x

常见函数

内置函数签名说明
genType abs(genType x)返回x绝对值
genType sign(genType x) sign(x)=1.0,0,1.0,if x > 0if x = 0if x < 0
genType floor(genType x)返回小于或等于x的最大的整数值
genType ceil(genType x)返回大于或等于x的最小整数值
genType fract(genType x)返回 xfloor(x) 的值
genType mod(genType x, float y)取模运算
genType mod(genType x, genType y)取模运算
genType min(genType x, genType y)取x,y间最小值
genType max(genType x, genType y)取x,y间最大值
genType clamp(genType x, genType minVal, genType maxVal)返回min(max(x,minVal),maxVal)
genType mix(genType x,genType y, genType a)功能使用因子a对x与y执行线性混合,即返回x*(1-a)+y*a
genType step(genType edge, genType x)如果x < edge,返回0.0,否则返回1.0
genType smoothstep(genType edge0, genType edge1, genType x)待研究

几何函数

内置函数签名说明
float distance(genType p0, genType p1)返回p0与p1之间的距离.
float dot(genType x, genType y)返回向量x,y的点积即 ni=0xiyi
vec3 cross(vec3 x, vec3 y)此函数返回向量x,y的叉积 x[1]y[2]y[1]x[2]x[2]y[0]y[2]x[0]x[0]y[1]y[0]x[1]
genType normalize(genType x)此函数返回与向量x方向相同,并且长度为1的向量.
genType faceforward(genType N, genType I, genType Nref)待研究
genType reflect(genType I, genType N)根据入射向量I,表面法向量N,返回反射方向的向量
genType refract(genType I, genType N, float eta)根据入射向量I,表面法向量N,以及折射系数eta,返回折射向量

- cross函数
此函数的功能返回两个向量x与y的叉积,两个向量叉积的绝对值即为这两个向量所在四边形的面积.

矩阵函数

内置函数签名说明
mat matrixCompMult(mat x, mat y)按各个部分将矩阵x与矩阵y相乘,即返回值矩阵中result[i][j]=x[i][j]*y[i][j]

向量关系函数

内置函数签名说明
bvec lessThan(vec x, vec y)
bvec lessThan(ivec x, ivec y)
此函数返回向量x与y中,各个分量执行x < y的结果
bvec lessThanEqual(vec x, vec y)
bvec lessThanEqual(ivec x, ivec y)
此函数返回向量x,y各个分量执行x <= y的结果
bvec greaterThan(vec x, vec y)
bvec greaterThan(ivec x, ivec y)
此函数返回向量x,y各个分量执行x > y的结果
bvec greaterThanEqual(vec x, vec y)
bvec greaterThanEqual(ivec x, ivec y)
此函数功能返回向量x,y中各个分量执行x >= y的结果
bvec equal(vec x, vec y)
bvec equal(ivec x, ivec y)
bvec equal(bvec x, bvec y)
此函数返回向量x与y中各个分量执行x == y的结果
bvec notEqual(vec x, vec y)
bvec notEqual(ivec x, ivec y)
bvec notEqual(bvec x, bvec y)
此函数返回向量x,y各个分量x != y 的结果
bool any(bvec x)如果x中任何一个分量为true,则返回true
bool all(bvec x)x中所有分量都为true,则返回true
bvec not(bvec x)对于x的各个分量执行的逻辑非运算

说明:上述表格中的vec代表的数据类型有vec2,vec3,vec4; ivec代表的数据类型有ivec2,ivec3,ivec4.以及bvec代表的数据类型bvec2,bvec3,bvec4.

纹理采样函数

内置函数签名说明
vec4 texture2D(sampler2D sampler, vec2 coord, [float bias])
vec4 texture2DProj(sampler2D sampler, vec3 coord, [float bias]
vec4 texture2DProj(sampler2D sampler, vec4 coord, [float bias]
vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod)
vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod)
vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod)
此系列函数功能为使用二维纹理坐标coord在由sampler参数指定的2D纹理中执行纹理采样.对于带有Proj后缀的函数,会将纹理坐标(coord.s, coord.t)除以coord的最后一个部分(coord.q).对于类型为vec4的coord.忽略其第三部分(coord.p)
vec4 textureCube(samplerCube sampler, vec3 coord)
vec4 textureCube(samplerCube sampler, vec3 coord, float bias)
vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod)
此函数功能为使用纹理坐标coord在由sampler参数指定的立方图纹理中执行纹理采样.此函数中coord不再是直接的纹理坐标,而是一个表示方向的向量,通过此向量搜首先确定要采样的面,再确定面里面的纹理坐标
vec4 texture3D(sampler3D sampler, vec3 coord, [float bias])OpenGL ES 2.0 未支持

1. bias参数
含有bias参数的纹理采样函数只能在片元着色器中调用,且此参数仅对sampler为mipmap类型的纹理时才有意义.
2. Lod后缀系列
带有”Lod”后缀的纹理采样函数仅适用于顶点着色器.此系列函数仅对sampler为mipmap类型的纹理有意义.
3. texture3D系列纹理采样函数在标准的OpenGL ES 2.0 中还没有支持.

微分函数

内置函数签名说明
genType dFdx(genType p)此函数返回参数p在x方向的偏导数
genType dFdy(genType p)此函数返回参数p在y方向的偏导数
genType fwidth(genType p)此函数返回参数p在x,y方向偏导数的绝对值之和

开发人员可以根据需要选择偏重高渲染质量还是高渲染速度

GLES20.glHint(GL_FRAGMENT_SHADER_DERIVATIVE_HINT, XXXXX);
//XXXXX 代表某选项的参数的值

这篇关于OpenGL ES 2.0 笔记 - 着色语言的内置函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/781613

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如