3

使用 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,其中纹理是测试彩虹。

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

我可以启用某种状态来获得我期望的钳位吗?

4

2 回答 2

4

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

无论哪种方式,您都无能为力。如果你的实现不像规范所说的那样钳制,你能做的最好的就是提交一个错误报告。

于 2012-02-09T18:51:36.300 回答
0

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

Cf 和 A​​f 是传入片段的原色分量;Cs 和 As 是纹理源颜色的分量,由过滤后的纹理值 Rt、Gt、Bt、At、Lt 和 It 得出,如表 3.21 所示;Cc 和 Ac 是纹理环境颜色的分量;Cp 和 Ap 是前一个纹理环境产生的分量(对于纹理环境 0,Cp 和 Ap 分别与 Cf 和 A​​f 相同);Cv 和 Av 是纹理函数计算的原色分量。

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

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

于 2016-08-01T18:08:26.857 回答