5

完全に透明なピクセルと完全に不透明なピクセルが混在するテクスチャをレンダリングしようとしています。完全に透明なピクセルでさえ深度バッファを更新するため、私の唯一のオプションは、距離的に後ろから前にレンダリングすることです(結局、完全に不透明なポリゴン)が、それが正確かどうかはわかりません。それは...ですか?

フラグメントシェーダーは、透明なピクセルに対して深度バッファーをそのままにしておくように指示できるようですが、明らかにそうではありません。私は何かが足りないのですか?

私が考えていない多くのポリゴン以外に、非常に不規則な形状の画像をレンダリングする他の賢明な方法はありますか?

4

2 に答える 2

9

質問をしたので、少なくとも1つの答えを見つけたようです。discardフラグメントシェーダーのステートメントは、私が必要とすることをしているようです:

void main(void) {
  vec4 textureColor = texture2D(uSampler, vTextureCoord);
  if (textureColor.a < 0.5) 
    discard;
  else
    gl_FragColor = vec4(textureColor.rgb * vLighting, textureColor.a);
}
于 2012-09-08T23:44:19.647 に答える
0

フラグメント シェーダーに到達すると、アルファを出力するかどうかに関係なく、ピクセルが存在することが既に決定されています。これを回避する唯一の方法は、glEnable(GL_ALPHA_TEST) などのオプションを使用することです。ただし、ハード ボーダーでスプライトを描画する場合など、アルファ値が 0 または 1 の場合にのみ使用できます。ソフトな境界線が必要な場合、または半透明のオブジェクトが必要な場合は、後ろから前に描く必要があります。また、このためにジオメトリを切り取る必要がある場合があります。

于 2012-09-08T23:41:51.927 に答える