当使用OpenGL 1.4固定功能多纹理时,每个纹理阶段的输出是否被钳制到[0,1]之后才被传递到下一阶段?
spec说(第153页):
如果TEXTURE_ENV_MODE的值是COMBINE,纹理函数的形式取决于COMBINE_RGB和COMBINE_ALPHA的值,根据 表3.24。然后,纹理函数的RGB和ALPHA结果分别乘以RGB_SCALE和ALPHA_SCALE的值。结果是 夹紧到[0,1]。
但在我的测试中,这并没有发生。我的RGB组件的纹理环境是:
(.5, .5, .5, 1.0)
输出变得明显更暗,我制作第一阶段的GL_CONSTANT颜色。
是否存在某种状态我可以实现我期望的钳位?
答案 0 :(得分:4)
很可能这是一个驱动程序错误。由于固定功能硬件不再存在,因此它们都在着色器中进行模拟。由于在着色器中钳位不是默认行为,因此它们必须记住在组合阶段之间进行钳制。如果他们忘了测试它......哎呀。
无论如何,你无能为力。如果您的实现不像规范所说的那样,那么您可以做的最好就是提交错误报告。
答案 1 :(得分:0)
是。在规范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。
我不知道你的具体情况,但这会回答你的第一个(和标题)问题。