使用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.
我不知道你的具体情况,但这回答了你的第一个(也是标题)问题。