OpenGL会钳制每个纹理阶段的输出吗



使用OpenGL 1.4固定函数多重纹理时,每个纹理阶段的输出在传递到下一个阶段之前是否被钳制为[0,1]?

说明书上写着(第153页):

如果TEXTURE_ENV_MODE的值为COMBINE,则纹理函数的形式取决于COMBINE_RGB和COMBINE_ALPHA的值,根据表3.24。然后,纹理函数的RGB和ALPHA结果分别乘以RGB_SCALE和ALPHA_SCALE的值。结果是箝位到[0,1]。

但在我的测试中,这并没有发生。我的RGB组件的纹理环境是:

  • 阶段1:从GL_TEXTURE中减去GL_CONSTANT,其中整个纹理为黑色,GL_CONSTANT颜色为(.5, .5, .5, 1.0)
  • 阶段2:将GL_TEXTURE添加到GL_PREVIOUS,其中纹理是测试彩虹

我使阶段1的GL_CONSTANT颜色越亮,输出明显越暗。

是否有某种状态可以实现我所期望的夹紧?

很有可能是驱动程序错误。由于固定功能硬件已不存在,因此所有硬件都在着色器中进行模拟。由于夹持不是着色器中默认的行为,因此它们必须记住在组合阶段之间夹持。如果他们忘了测试……哎呀。

不管怎样,你都无能为力。如果您的实现没有像规范所说的那样钳制,那么您最好能做的就是提交一份错误报告。

是。在规范第3.8.13章中,它说:

Cf和Af是进入片段的原色成分;Cs和As是纹理源颜色的组成部分,源自过滤后的纹理值Rt、Gt、Bt、At、Lt和It,如桌子3.21;Cc和Ac是纹理环境颜色的组成部分;Cp和Ap是由先前纹理产生的组件环境(对于纹理环境0,Cp和Ap与Cf相同和Af);并且Cv和Av是原色分量由纹理函数计算。

所有这些颜色值都在[0;1]范围内。纹理函数在表中指定3.22,3.23,以及3.24.

我不知道你的具体情况,但这回答了你的第一个(也是标题)问题。

相关内容

  • 没有找到相关文章