[已解决] 不确定如何,但目前无法重现此问题。
尝试使用3d查找表重新映射rgb值。
顶点着色器:(如果相关)
void main()
{
gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0;
gl_Position = ftransform();
gl_FrontColor = gl_Color;
}
片段着色器
uniform sampler2D tex;
uniform sampler3D lut;
void main()
{
vec3 color = texture2D(tex, gl_TexCoord[0].st).rgb;
gl_FragColor = vec4(texture3D(lut, vec3(.5, .5, .5)).xyz, .5);
// gl_FragColor = vec4(texture3D(lut, vec3(color.r, .5, .5)).xyz, .5);
}
lut
是一个32x32x32纹理,充满红色像素(用于测试)
tex
是1280x720纹理
两者都使用rgb
作为内部像素格式。
当使用立即值索引到LUT(未注释的行)时:
我看到一个50%alpha的红色屏幕的正确结果。
当索引与color.rgb
(注释行)相关时:
我看到整个屏幕黑色。
我也试过vec3(color.r / 1000.0, .5, .5)
,
只是为了确保x
索引低于1
那没有用。
那么如何使用我当前的tex2d rgb值正确访问lut3d?