2017-08-30 28 views
1

OpenGLでテクスチャの透明性に問題があります。下の図のように、うまくいきません。黒は実際にはClearColorで、私は画面をクリアすることに注意してください。OpenGL:透明テクスチャの問題

enter image description here

私はブレンドを実装するには、次のコードを使用します。

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

ここに私のフラグメントシェーダです:ここでは

#version 330 core 

in vec2 tex_coords; 

out vec4 color; 

uniform vec4 spritecolor; 
uniform sampler2D image; 

void main(void) 
{ 
    color = spritecolor * texture(image, tex_coords); 
} 

は場合には、ワイヤフレームモードでのシーンのスクリーンショットです描かれた頂点を手助けします:

Scene in Wireframe mode

他に何かが必要な場合は、お気軽にお問い合わせください。

+0

あなたが最初に不透明なオブジェクトを描画する必要があります。透明なオブジェクトは、カメラの位置と逆の距離でソートされた後に描画する必要があります。 (デプステストを考えてみよう) – Rabbid76

+0

はい、そうでした!私はそれを受け入れることができるように、答えとしてあなたのコメントを追加できますか? – AProgrammer

答えて

3

あなたはTransparency Sorting

をしなければならない場面が描かれている場合、通常は深度テスト(glDepthFunc)がGL_LESSに設定されています。これは、これまで描画されたシーンの前にあるときにのみ、フラグメントを描画します。

透明を正しく描画するには、まず不透明なオブジェクトを描画する必要があります。透明なオブジェクトは、後ろに描かれ、カメラの位置と逆の距離でソートされなければなりません。透明を正しく描画するには、最初に不透明なオブジェクトを描画する必要があります。透明なオブジェクトは、カメラの位置と逆の距離でソートされた後に描画する必要があります。
カメラ位置までの距離が最も大きい透明オブジェクトを最初に描画し、最後に透明オブジェクトを描画します。これはカメラ位置までの距離が最も狭くなります。

は、次の質問への回答を参照してください:

関連する問題