2011-09-10 11 views
1

これは私が3Dオブジェクトを描画した後、オルト投影をオンにする方法である:オルトでアルファブレンディングが動作しないのはなぜですか?

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0,Screen_Width,Screen_Height,0,0,1); 

そして、これは私がブレンドをオンにし、3Dオブジェクトを描画した後、オルトでテクスチャを描画する方法である:

glEnable(GL_TEXTURE_2D); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 
glColor4f(1,1,1,1); 

glBindTexture(GL_TEXTURE_2D,Texture1); 
glBegin(GL_QUADS); 
//draw 1st quad 
glEnd(); 

glBindTexture(GL_TEXTURE_2D,Texture2); 
glBegin(GL_QUADS); 
//draw 2nd quad 
glEnd(); 

glDisable(GL_BLEND); 
glDisable(GL_TEXTURE_2D); 

Quad1はAですQuad2よりも大きく、Quad2の一部をカバーしています。どちらのテクスチャもRGBAとしてアルファチャンネルを持っています。

問題は、Quad1 & Quad2は、アルファで3Dオブジェクトをオーバーレイしますが、Quad1のアルファはQuad2の上にあるときには機能しません。それは、RGBのようにQuad2の上に描画します。

どうすればこの問題を解決できますか?

答えて

2

深度バッファリングは有効になっていますか?そうであれば、既にそこにあるものとアルファブレンドされずに破棄される(Zテストに失敗する)可能性があります。

深度バッファを使用している場合は、透明オブジェクトを前後に並べて描画する必要があります。純粋に2Dシーンの

、あなたもデプスバッファを必要としないかもしれない、とあなたはそれをオフにすることができます

glDisable(GL_DEPTH_TEST); 
+0

はそんなにありがとう、私はGL_DEPTH_TESTを無効にしませんでした:) – jondinham

関連する問題