在其他一些 GLSL 版本中,gl_BackColor 似乎提供了对当前渲染片段背后颜色的访问。这对于一些自定义 alpha 混合很有用。但是用于 webgl 的 glsl 似乎不支持它。另一方面,从 gl_FragColor 之前阅读为其分配任何值似乎得到正确的背景颜色,但仅适用于我的 Ubuntu。在我的 Mac Book Pro 上,它失败并且似乎只得到一些无用的随机颜色。
所以我的问题是,有没有直接的方法可以访问当前渲染片段后面的背景颜色?如果没有,我该怎么做?
在其他版本的 GLSL 中,gl_BackColor 似乎提供了对当前渲染片段背后颜色的访问。
不,从来没有这种情况。gl_BackColor
是背面颜色,用于进行双面照明。而且它永远无法从片段着色器中访问;它是一个顶点着色器变量。
对于双面光照,您在顶点着色器gl_FrontColor
和gl_BackColor
顶点着色器中都进行了写入。片段着色器的gl_Color
变量填充了朝向相机的任何一面的颜色。所以如果三角形的背面是向前的,那么它会得到插值gl_BackColor
。
您所要求的内容在 GLSL中从未提供过。
正如尼可波拉斯所写,没有直接的方法。
但是,您可以通过使用渲染到纹理方法来使用间接方式:
如果您需要渲染多个透明对象,您可以使用两个屏幕外纹理和它们之间的乒乓球,当所有对象都被渲染后,最终将结果渲染到屏幕上。