GLSL:内建函数参数genType的含义

在GLSL的内建函数中,经常看到参数的类型为genType之类,genType到底指的是什么类型?

  • 当函数的输入参数类型(和对应的输出类型)为float, vec2, vec3, or vec4时, 使用genType作为参数的类型;
  • 当函数的输入参数类型(和对应的输出类型)为int, ivec2, ivec3, or ivec4时, 使用genIType作为参数的类型;
  • 当函数的输入参数类型(和对应的输出类型)为uint, uvec2, uvec3, or uvec4时, 使用genUType作为参数的类型;
  • 当函数的输入参数类型(和对应的输出类型)为bool, bvec2, bvec3, or bvec4时, 使用genBType作为参数的类型;
  • 当函数的输入参数类型(和对应的输出类型)为double, dvec2, dvec3, or dvec4时, 使用genDType作为参数的类型;

具体到某个GLSL函数时,会使用实际的类型替代genType, genIType, genUType, or genBType,同时输出的类型的组件数与输入类型的组件数相同,这一句有点绕,举个例子:

mod 函数定义为:
genType mod(genType x,float y);
genType mod(genType x,genType y);
genDType mod(genDType x,double y);
genDType mod(genDType x, genDType y);

返回值:x - y * floor(x/y)

具体到某个渲染器里,可以有这样的写法 mod(uv, 2.0)
uv坐标是vec2类型,vec2本身就有两个值,那么函数返回应该还是一个vec2,包含两个值,假设这个uv坐标时(3.0, 4.0),那么返回值应该是:(3.0-2.0floor(3.0/2.0), 4.0-2.0floor(4.0/2.0)), 结果为(1.0, 0.0)

在ShaderToy中,uv坐标如果做了规范化处理,uv.x, uv.y都落在[0,1]之间,那么mod(uv, 1.0), 结果 uv = mod(uv, 1.0).

在渲染器里使用最多的还是 genType, genDType, 就是以 float, double为基本元素的参数。尤其是以 float 为基本元素的 float, vec2, vec3, vec4.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

科技与文明

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

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

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

打赏作者

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

抵扣说明:

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

余额充值