Glsl WebGL渲染缓冲区从着色器接收倾斜像素值

Glsl WebGL渲染缓冲区从着色器接收倾斜像素值,glsl,opengl-es-2.0,shader,webgl,glblendfunc,Glsl,Opengl Es 2.0,Shader,Webgl,Glblendfunc,我正在将多边形场景渲染到多个渲染目标,以便执行后处理效果。但是,我在片段着色器中设置的值似乎无法在像素着色器中准确反映 现在管道看起来像这样: gl_FragColor = vec4(1, 0, 0, 0.5); 将基本多边形(使用下面的简单着色器)渲染到中间缓冲区 将缓冲区渲染为屏幕大小的四边形 我正在使用WebGL Inspector(http://benvanik.github.com/WebGL-Inspector/)查看中间缓冲区(使用gl.createFrameBuffer()

我正在将多边形场景渲染到多个渲染目标,以便执行后处理效果。但是,我在片段着色器中设置的值似乎无法在像素着色器中准确反映

现在管道看起来像这样:

gl_FragColor = vec4(1, 0, 0, 0.5);
  • 将基本多边形(使用下面的简单着色器)渲染到中间缓冲区
  • 将缓冲区渲染为屏幕大小的四边形
我正在使用WebGL Inspector(http://benvanik.github.com/WebGL-Inspector/)查看中间缓冲区(使用
gl.createFrameBuffer()
创建)

在绘制多边形时,我有一个非常简单的片段着色器,如下所示:

gl_FragColor = vec4(1, 0, 0, 0.5);
在我抽签之前:

gl.disable(gl.BLEND);
我希望这会在缓冲区中创建一个值正好为(255,0,0128)的像素,但事实上,它会创建一个值为(255,0,0,64)的像素——阿尔法的一半

这个程序相当大,非常复杂,所以如果答案不明显,我会用具体的细节更新帖子


谢谢

您是否已将premultiplyAlpha设置为true?首先想到的是:奇怪的alpha值。

你怎么知道那个像素的alpha值是多少?你在画什么,你在写这个像素值。我担心我们可能需要更多的信息,但有一个想法立即跳到我的脑海:你有抗锯齿功能吗?如果是这样,并且您正在采样的像素位于多边形的边缘,那么它最终可能会被混合成低于预期的值。@Nicolas:我已经使用WebGL Inspector直接检查了像素的值,在最终渲染中对其屏幕值进行采样,并且在后续处理步骤中观察了其行为。该值是从一个简单多边形(上面有简单片段着色器)绘制到一个帧缓冲区中的,然后该帧缓冲区被渲染到屏幕缓冲区。@Toji颜色在多个多边形的整个表面上是一致的,我在几十个不同的渲染中采样了100个点,试图找出原因。(我刚刚了解到AA在Chrome和FF中都默认启用,这是出乎意料的!感谢您指出这一点,我们将调查它是否相关。)您是否检查过渲染目标没有应用gamma校正?如果是这样的话,它会改变你返回的值。我想这会干扰RGB值,而不是A值,但我愿意检查一下。