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はQuad2より少し大きく、Quad2の一部をカバーしています。両方のテクスチャには、RGBAとしてのアルファチャネルがあります。

問題は、Quad1とQuad2が3Dオブジェクトをアルファで正しくオーバーレイしますが、Quad1のアルファがQuad2の上にある場合は機能しないことです。RGBのみのようにQuad2の上に描画します。

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

4

1 に答える 1

2

デプスバッファリングは有効になっていますか?もしそうなら、それはフラグメントがすでにそこにあるものとアルファブレンドされる代わりに破棄される(Zテストに失敗する)原因となる可能性があります。

デプスバッファを使用している場合は、透明なオブジェクトを後ろから前の順序で描画する必要があります。

純粋な2Dシーンの場合、デプスバッファさえ必要ない場合があり、オフにするだけで済みます。

glDisable(GL_DEPTH_TEST);
于 2011-09-10T17:47:56.973 に答える