3

我有一个看起来像这样的小着色器,并且效果很好。

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有以前的像素颜色,但没有骰子。

如何将计算的颜色添加到以前的颜色?我不在乎上面是什么,这些都是我可以简单地加在一起的发光的东西。

4

1 回答 1

1

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

于 2012-04-14T23:53:23.970 回答