2

透明性とその仕組みを確認しようとしています。

ソリッドスフィアとその中にソリッドキューブを作成しました。有効にしました

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

透明度は、color4f を使用して期待どおりに機能します。
問題は、球体の透明度を 1.0 に設定しても立方体が表示されることです。

私もこれらを使用しています:

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL); 
glClearDepth(1); 
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glEnable(GL_CULL_FACE);  
glFrontFace(GL_CW);

球の透明度が != 1.0 の場合にのみ立方体を表示するにはどうすればよいですか?

4

1 に答える 1

2

設定した理由はありますglFrontFace(GL_CW);か?デフォルトはGL_CCWであるため、前面をカリングし、背面をレンダリングします。球の前面が欠落していると、球の内部が表示されます。

詳細に:

通常の(src_alpha、1-src_alpha)ブレンドを使用して半透明のオブジェクトをレンダリングする場合、半透明のサーフェスを深さ順に、後ろから前にレンダリングする必要があります。

オブジェクトの背面のみをレンダリングすると、(多かれ少なかれ対称である場合)正常に見える場合がありますが、実際には裏返しになっているため、実際にオブジェクトの内側にあるオブジェクトを正しく遮ることはできません。

したがって、これが機能するためには、前面がカリングされないことと、不透明またはより遠いオブジェクトが最初にレンダリングされることの両方が重要です。

球の前面と背面の両方を半透明で正しくレンダリングする場合は、前面の前に背面をレンダリングする必要があります。これはポリゴンの並べ替えで実行できますが、凸型オブジェクトの場合は、背面のカリングを反転させて2回レンダリングするだけで十分です。したがって、最初に背面をレンダリングし、次に前面を2つの別々のパスでレンダリングします。

于 2012-12-23T14:03:50.803 に答える