私はあなたのケースでは、あなたが(ES3でサポートされている)フラグメントシェーダで深さを修正することができると信じて。その位置からZ
の座標を削除しながら、それを使って奥行きを設定することができます。しかし、Z
コンポーネントには別の値が必要です。
だから、フラグメントシェーダであなたのようなものを持っているでしょう:
...
varying zPositionComponent;
...
vac4 actualVertexPosition = ...; // whatever you had in gl_Position
zPositionComponent = actualVertexPosition.z;
gl_Position = vec4(actualVertexPosition.x, actualVertexPosition.y, 0.0, actualVertexPosition.w);
は、フラグメントシェーダは、単にgl_FragDepth = zPositionComponent;
注意として、フラグメント奥行き補正を追加します。私はこれが動作することを確認していない場合、またはあなたは実際にこれをサポートしています。実際にはフラグメントの現在の深さを確認し、フラグメントを破棄する必要があります(手動で深さバッファを実行する)。複雑になる可能性があります...どうすればよいのか教えてください。
、それは初期の深さテストを排除する:
次いで、フラグメントシェーダで私は避けたいものです。 – user5024425
はい、それは私がマニュアル深度バッファテストで意味したものです。それは複雑になる。それでももっと良い解決策がないかもしれません...深度バッファを使ってステンシルバッファにシェイプ "ID"を書き込んだ後、Z座標なしで再描画すると思いますが、それはさらに悪くなります。まさにあなたがやっていること。 –
基本的に私はいくつかのビルボード/ 2Dクワッドを描いていますが、ジオメトリにはまだシーンの残りの部分で正しいz-Testingがあるはずです。 – user5024425