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 に答える