8.23 OpenGL纹理和采样器:纹理比较模式

纹理比较模式 Texture Comparison Modes

纹理值也可以根据指定的比较函数进行计算。纹理参数TEXTURE_COMPARE_MODE指定了比较的操作数,参数TEXTURE_COMPARE_FUNC指定了比较函数。

深度纹理比较模式 Depth Texture Comparison Mode

如果当前绑定纹理的基础内部格式为DEPTH_COMPONENTDEPTH_STENCIL,那么TEXTURE_COMPARE_MODETEXTURE_COMPARE_FUNC将按照以下描述控制纹理单元的输出。否则,纹理单元将以正常方式运作,跳过纹理比较。

假设Dt为深度纹理值,St为模板索引组件。如果没有模板组件,St的值未定义。令Dref为着色器纹理查找函数提供的参考值。如果纹理的内部格式指示为定点深度纹理,则DtDref会被限制在[0, 1]范围内;否则不进行任何钳位操作。

接下来,按照以下方式计算有效纹理值:

  • 如果基础内部格式为STENCIL_INDEX,则r = St
  • 如果基础内部格式为DEPTH_STENCIL,且DEPTH_STENCIL_TEXTURE_MODE的值为STENCIL_INDEX,则r = St
  • 否则,如果TEXTURE_COMPARE_MODE的值为NONE,则r = Dt
  • 否则,如果TEXTURE_COMPARE_MODE的值为COMPARE_REF_TO_TEXTURE,则r依赖于纹理比较函数,具体如Table 8.23所示。

得到的结果r将被赋给Rt

如果TEXTURE_MAG_FILTER的值不是NEAREST,或者TEXTURE_MIN_FILTER的值不是NEARESTNEAREST_MIPMAP_NEAREST,那么r可能通过比较多个深度纹理值与纹理参考值来计算得出。这一过程的具体细节取决于实现,但r应该是一个在[0, 1]范围内的值,与其通过比较成功的次数或失败次数成比例。


Texture Comparison FunctionComputed result r
LEQUALr = ( Dref ≤ Dt) ? 1.0 : 0.0
GEQUALr = ( Dref ≥ Dt) ? 1.0 : 0.0
LESSr = (Dref < Dt) ? 1.0 : 0.0
GREATERr = (Dref > Dt) ? 1.0 : 0.0
EQUALr = (Dref = Dt) ? 1.0 : 0.0
NOTEQUALr =(Dref != Dt) ? 1.0 : 0.0
ALWAYSr = 1.0
NEVERr = 0.0

Table 8.23: Depth texture comparison functions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值