私はOpenGLでモデルをレンダリングしようとしています。私はC++とOpenGLの4日目です(私はこれを素早く学びました)、私はテクスチャで少し止まっています。オブジェクトを透明にするが、テクスチャを表示するにはどうすればよいですか?
私は自分のテクスチャをアルファにするのに少し問題があります。このイメージでは、私はスパイラルナイトのこのキャラクターを持っています。彼の頭の上に見ることができるように、それらの白い部分があります。私はここで仮定している、と私はこの質問を、なぜこれは、テクスチャの透明度が作業であるということですが、何が有効と私のブレンド機能がglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
テクスチャの背後にある三角形はまだ表示されています。
どのようにこれらの三角形を非表示にしても、私のテクスチャを表示できますか?
ありがとうございました。
スレは「テクスチャの背後にある三角形」ではありません。 GLはテクスチャを描画せず、プリミティブを描画します。正確に何が起こっているのかは全く分かりません(テクスチャが持つakohaの値、テクスチャを最終的なフラグメントの色などに組み合わせる方法など)。ブレンディングではプリミティブを正しい順序で描画する必要があることにも気づくはずです。この特定のケースでは、ブレンドを使用せずに、アルファに基づいて破棄するだけで、この問題を回避することさえできます。 – derhass
あなたは_ "アルファに基づいて捨てるだけで"と言います。_ - 私は捨てるなどの研究をしましたが、私が読んだことはそれほど遅くなる可能性があります。別の方法がありますか?代わりのメソッドを探してアルファテストを有効にしてから、アルファ関数を 'glAlphaFunc(GL_GREATER、0.0); 'に設定しましたが、それは動作していないようです。 –
アルファテストは推奨されていません。現代的なアプローチはシェーダでは破棄されます。この文脈では、「遅い」とは、事前に伝えるのが難しいことを意味します。遅い深度テストに戻り、ある程度の不均一な制御フローが発生する可能性があります。ただし、代償としてオーダーの独立性を得ることができます。 – derhass