如何使用webGL glsl获得gl_背景色?

如何使用webGL glsl获得gl_背景色?,glsl,webgl,Glsl,Webgl,在GLSL的其他版本中,gl_BackColor似乎提供了对当前渲染片段背后颜色的访问。这对于某些自定义alpha混合非常有用。但GLSL for webgl似乎不支持它。另一方面,在为其指定任何值之前,从gl_FragColor读取,似乎可以获得正确的BackColor,但只有在我的Ubuntu上才有效。在我的MacBookPro上,它失败了,似乎只能得到一些无用的随机颜色 所以我的问题是,有没有任何直接的方法可以访问当前渲染片段背后的背景色?如果没有,我怎么做 在GLSL的其他一些版本中,g

在GLSL的其他版本中,gl_BackColor似乎提供了对当前渲染片段背后颜色的访问。这对于某些自定义alpha混合非常有用。但GLSL for webgl似乎不支持它。另一方面,在为其指定任何值之前,从gl_FragColor读取,似乎可以获得正确的BackColor,但只有在我的Ubuntu上才有效。在我的MacBookPro上,它失败了,似乎只能得到一些无用的随机颜色

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

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

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

对于双面照明,您写入了顶点着色器中的
gl_FrontColor
gl_BackColor
。片段着色器的
gl_Color
变量将填充哪一侧的颜色朝向摄影机。因此,如果三角形的背面是向前的,那么它会得到插值的
gl\u背景色

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

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

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

对于双面照明,您写入了顶点着色器中的
gl_FrontColor
gl_BackColor
。片段着色器的
gl_Color
变量将填充哪一侧的颜色朝向摄影机。因此,如果三角形的背面是向前的,那么它会得到插值的
gl\u背景色


你所要求的东西从来没有在GLSL中提供过。

正如Nicol Bolas所写,没有直接的方法

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

  • 首先将不透明对象(如果有)渲染为屏幕外纹理,而不是屏幕
  • 将屏幕外纹理渲染到屏幕
  • 使用执行自定义混合的着色器将透明的“自定义混合”对象渲染到屏幕上。(由于您是手动进行混合,因此不应启用总账的混合标志)。您应该将屏幕外纹理作为统一添加到片段着色器,该着色器允许您采样背景颜色并计算自定义混合

  • 如果需要渲染多个透明对象,可以使用两个屏幕外纹理并在它们之间进行乒乓,最后在渲染所有对象后将结果渲染到屏幕上。

    正如Nicol Bolas所写,没有直接的方法

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

  • 首先将不透明对象(如果有)渲染为屏幕外纹理,而不是屏幕
  • 将屏幕外纹理渲染到屏幕
  • 使用执行自定义混合的着色器将透明的“自定义混合”对象渲染到屏幕上。(由于您是手动进行混合,因此不应启用总账的混合标志)。您应该将屏幕外纹理作为统一添加到片段着色器,该着色器允许您采样背景颜色并计算自定义混合

  • 如果需要渲染多个透明对象,可以使用两个屏幕外纹理并在它们之间进行乒乓,最后在渲染所有对象后将结果渲染到屏幕上。

    你说得对。我误解了。顺便说一下,我正在尝试使用webgl进行2D混合。我需要一些自定义混合以提供更好的效果。可以吗?你是对的。我误解了。顺便说一下,我正在尝试使用webgl进行2D混合。我需要一些自定义混合以提供更好的效果。我可以吗?