2017-02-12 8 views
0

私はOpenGLでモデルをレンダリングしようとしています。私はC++とOpenGLの4日目です(私はこれを素早く学びました)、私はテクスチャで少し止まっています。オブジェクトを透明にするが、テクスチャを表示するにはどうすればよいですか?

私は自分のテクスチャをアルファにするのに少し問題があります。このイメージでは、私はスパイラルナイトのこのキャラクターを持っています。彼の頭の上に見ることができるように、それらの白い部分があります。私はここで仮定している、と私はこの質問を、なぜこれは、テクスチャの透明度作業であるということですが、何が有効と私のブレンド機能がglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

に設定ブレンド持ってSpiral Knights character with no transparency

テクスチャの背後にある三角形はまだ表示されています。

どのようにこれらの三角形を非表示にしても、私のテクスチャを表示できますか?

ありがとうございました。

+1

スレは「テクスチャの背後にある三角形」ではありません。 GLはテクスチャを描画せず、プリミティブを描画します。正確に何が起こっているのかは全く分かりません(テクスチャが持つakohaの値、テクスチャを最終的なフラグメントの色などに組み合わせる方法など)。ブレンディングではプリミティブを正しい順序で描画する必要があることにも気づくはずです。この特定のケースでは、ブレンドを使用せずに、アルファに基づいて破棄するだけで、この問題を回避することさえできます。 – derhass

+0

あなたは_ "アルファに基づいて捨てるだけで"と言います。_ - 私は捨てるなどの研究をしましたが、私が読んだことはそれほど遅くなる可能性があります。別の方法がありますか?代わりのメソッドを探してアルファテストを有効にしてから、アルファ関数を 'glAlphaFunc(GL_GREATER、0.0); 'に設定しましたが、それは動作していないようです。 –

+0

アルファテストは推奨されていません。現代的なアプローチはシェーダでは破棄されます。この文脈では、「遅い」とは、事前に伝えるのが難しいことを意味します。遅い深度テストに戻り、ある程度の不均一な制御フローが発生する可能性があります。ただし、代償としてオーダーの独立性を得ることができます。 – derhass

答えて

0

ありブレンディングを使用する際に行われる2つの重要な事柄である:デプスバッファベースのレンダラーで順番独立した透明性がまだ進行中である(そのために、あなたは必見ソートプリミティブは後ろから前へ

  1. とレンダリング研究テーマ)。

  2. アルファチャンネルを制御するためにテクスチャを使用する場合は、テクスチャのアルファ値を何らかの形で結果のフラグメントカラーに渡すか、固定機能パイプラインを使用している場合は、 GL_MODULATEテクスチャenvモード、またはプリミティブカラーアルファ値を0に設定したGL_DECAL、またはGL_REPLACEを使用します。

+0

タスク#2の2番目の部分に関しては、私は 'glTexEnvi'が3つの引数を取ることを知っています。 [このページ](https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTexEnv.xml)を読んだ後、私はそのページの情報に基づいてあなたが言ったことをやってみました。内部フォーマットをGL_RGBA( 'glTexImage2D'関数内)に設定し、' glTexEnvi(GL_TEXTURE_ENV、GL_TEXTURE_ENV_MODE、GL_REPLACE); 'を使用していますが、それは動作していないようです。何か不足していますか? –

+0

@ XantheDragon:あなたのコードを見ずに告げるのは難しいです。 – datenwolf

関連する問題