如何使用webGL glsl获取gl_BackColor?

时间:2012-06-02 04:49:51

标签: glsl webgl

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

所以我的问题是,是否有任何直接方法可以访问当前渲染片段后面的backColor?如果没有,我该怎么办?

2 个答案:

答案 0 :(得分:1)

  

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

不,从未如此。 gl_BackColor背面颜色,用于进行双面照明。从片段着色器中可以访问永远;它是一个顶点着色器变量。

对于双面照明,您在顶点着色器中写入了gl_FrontColorgl_BackColor。片段着色器的gl_Color变量用任何一面的颜色面向相机填充。因此,如果三角形的背面是向前的,那么它将得到插值的gl_BackColor

你要求的是从未在GLSL中可用。

答案 1 :(得分:1)

没有直接的方法,正如Nicol Bolas写的那样。

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

  1. 首先将不透明对象(如果有)渲染到屏幕外纹理而不是屏幕。
  2. 将屏幕外纹理渲染到屏幕
  3. 使用执行自定义混合的着色器将透明的“自定义混合”对象渲染到屏幕。 (由于您手动进行混合,因此不应启用GL的混合标记)。您应该将屏幕外纹理作为制服添加到片段着色器中,以便您可以对背景颜色进行采样并计算自定义混合。
  4. 如果需要渲染多个透明对象,可以使用两个屏幕外纹理并在它们之间打乒乓,最后在渲染完所有对象后将结果渲染到屏幕上。