OpenGL 采样器的比较模式

来自 flyfish|已发表 2020-10-27

深度纹理可以通过两种模式进行采样, 第一种是按传统的纹理采样模式直接采样来获取深度值,这将会返回一个单浮点数vec4 类型的值。也可以使用比较模式(comparison mode) 模式来采样深度纹理。使用比较模式时,我们需要指定一个参考值(reference value) , 该参考值与从深度纹理中采样的深度值进行比较,为了使参考值与采样的深度值进行比较,我们还需要设置一个比较函数(comparison function),比较结果只有R值是比较结果。测试成功,返回 1.0f, 测试失败,返回0.0f.

当使用线性过滤器去采样时,采用结果是由硬件设备的实现来定义的,一般比较模式的返回值的范围是[0 , 1.0]之间, 这种采样方式称为百分比渐进采样方式“percentage Closer Filering”.

如果纹理是归一化的整型值,那么传入的参考值也将被归一化到[0,1]的范围内去匹配纹理值。否则参考值不会被归一化到[0,1]的区间.

使用比较模式需要专门做两方面的设置,首先GLSL中纹理的采样必须是阴影采样器,也就是这种模式专门针对的是阴影的采样,其次激活的深度纹理关联的采样器要开启比较模式。

要将纹理设置成比较模式,需要设置纹理比较模式GL_TEXTURE_COMPARE_MODE 设置成 GL_COMPARE_REF_TO_TEXTURE, 把纹理比较函数 GL_TEXTURE_COMPARE_FUNC 设置成 GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL , GL_NOT_EQUAL, GL_GEQUAL, GLGREATER 之一, 比较方式:

ref OPERATOR texture

如果设置比较函数为 GL_LESS, 当 参考值 ref 小于 采样的纹素值的情况下,测试通过时, 采样器将会返回非零的值——百分比渐进的采样方式[0,1] 或 0、1 值 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值