2017-02-21 11 views
0

私はこのしたいのですが:ブレンディングとデプステストを同時に使用できますか?

描画オブジェクト1(IはglDrawElementまたはglDrawArrayを使用する必要があるため、デプステストを使用する必要があります) 描画オブジェクト2

ブレンド1および2(OBJ 1 +透明obj2が単純な擬似コードによって説明する)

glEnable(GL_BNELD); 

/// draw obj1 /// 
glEnable(GL_DEPTH_TEST); 
glUniform4f(color1,1.0f); 
glDrawElements(...) // draw obj1 
glDisable(GL_DEPTH_TEST); 

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

/// draw obj2 /// 
glEnable(GL_DEPTH_TEST); 
glUniform4f(color2,0.5f); 
glDrawElements(...) // draw obj2 
glDisable(GL_DEPTH_TEST); 

glDisable(GL_BLEND); 

Iは、これらのブレンド及び深さテストが同時に使用されない場合、任意の代替があることを聞きましたか? (実際には上記コードの結果は奇妙に見えます)

+0

はい、あなたは何をしているのかを知る必要がありますが(アーティファクトを避けるために)、これは助けになるでしょう:[OpenGL - オーダーに依存しない透明性を作成する方法](http://stackoverflow.com/a/37783085/2521214) – Spektre

答えて

2

はい、ブレンドと深度テストは同時に使用できます。フォアグラウンドで不透明なものによって部分的に遮られているものを半透明に描きたい場合は、それが必要です。

レンダリングをバッファリングし、単純な深さの現在の技術では不可能である何、すなわち結果が遠くから近くにそれらを引くと同等であることで、任意の順序でオブジェクトをブレンドし、ための独立した透明性です。

関連する問題