GLSL混合模式,创造附加透明度

时间:2012-04-14 23:38:42

标签: glsl webgl three.js

我有一个看起来像这样的小阴影,效果很好。

uniform float beatScale;
varying vec3 vPos;

void main() {

  vec3 normPos = (normalize(vPos) + vec3(1, 1, 1)) / vec3(2, 2, 2);
  float alpha;

  if (normPos.y < beatScale - 0.1) {
    alpha = 0.0;
  } else if (normPos.y < beatScale) {
    alpha = 1.0 - (beatScale - normPos.y) / 0.1;
  } else {
    alpha = 1.0;
  }

  gl_FragColor = vec4(normPos, alpha);    
}

但是我前面对象的透明部分会阻挡后面的对象,淘汰应该渲染的像素。

我的抱歉尝试是:

gl_FragColor = gl_FragColor + vec4(normPos, alpha);

但这似乎并没有改变它。我希望gl_FragColor具有前一个像素颜色,但没有骰子。

如何将计算出的颜色添加到之前的颜色?我不在乎什么是最重要的,这是我可以简单地加在一起的所有发光的东西。

1 个答案:

答案 0 :(得分:1)

如果你正在进行加性混合,那么你应该关闭深度写入。