0

在其他一些 GLSL 版本中,gl_BackColor 似乎提供了对当前渲染片段背后颜色的访问。这对于一些自定义 alpha 混合很有用。但是用于 webgl 的 glsl 似乎不支持它。另一方面,从 gl_FragColor 之前阅读为其分配任何值似乎得到正确的背景颜色,但仅适用于我的 Ubuntu。在我的 Mac Book Pro 上,它失败并且似乎只得到一些无用的随机颜色。

所以我的问题是,有没有直接的方法可以访问当前渲染片段后面的背景颜色?如果没有,我该怎么做?

4

2 回答 2

2

在其他版本的 GLSL 中,gl_BackColor 似乎提供了对当前渲染片段背后颜色的访问。

不,从来没有这种情况。gl_BackColor背面颜色,用于进行双面照明。而且它永远无法从片段着色器中访问;它是一个顶点着色器变量。

对于双面光照,您在顶点着色器gl_FrontColorgl_BackColor顶点着色器中都进行了写入。片段着色器的gl_Color变量填充了朝向相机的任何一面的颜色。所以如果三角形的背面是向前的,那么它会得到插值gl_BackColor

您所要求的内容在 GLSL中从未提供过。

于 2012-06-02T04:54:40.820 回答
1

正如尼可波拉斯所写,没有直接的方法。

但是,您可以通过使用渲染到纹理方法来使用间接方式:

  1. 首先将不透明对象(如果有)渲染到屏幕外纹理而不是屏幕。
  2. 将离屏纹理渲染到屏幕上
  3. 使用执行自定义混合的着色器将透明的“自定义混合”对象渲染到屏幕上。(由于您手动进行混合,因此不应启用 GL 的混合标志)。您应该将屏幕外纹理作为制服添加到片段着色器中,这样您就可以对背景颜色进行采样并计算您的自定义混合。

如果您需要渲染多个透明对象,您可以使用两个屏幕外纹理和它们之间的乒乓球,当所有对象都被渲染后,最终将结果渲染到屏幕上。

于 2012-06-02T07:47:30.693 回答