GLKitで半透明のプリミティブを描きたいです。私はすでに深度テストを無効にしglDisable(GL_DEPTH_TEST)
、ブレンディングを有効にしました
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
アルファ値が大きい場合 (例: 0.9)、近い三角形の上に表示されないように、最初に最も遠い三角形を描画する必要があります。これは、 glBlendFunc のドキュメントにも記載されています。
透明度は、ブレンド関数 (GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA) を使用してプリミティブを最も遠いものから最も近いものへと並べ替えるのが最適です。この透明度の計算では、フレーム バッファにアルファ ビットプレーンが存在する必要がないことに注意してください。
そしてOpenGL 透過性 FAQで:
アプリケーションで深度バッファリングを使用する場合、プリミティブをレンダリングする順序に注意する必要があります。完全に不透明なプリミティブを最初にレンダリングする必要があり、次に部分的に不透明なプリミティブを後ろから前にレンダリングする必要があります。プリミティブをこの順序でレンダリングしないと、部分的に不透明なプリミティブを通して表示されるプリミティブが深度テストを完全に失う可能性があります。
ただし、表示角度は変更される可能性があるため (レンダリング効果の を変更するとmodelViewMatrix
)、最も遠いものから最も近いものへの順序は、現在の表示角度によって異なります。
OpenGL でプリミティブを正しい順序で自動的にレンダリングする方法はありますか? (現在の視野角に応じて)のz位置を計算し、フレームごとに(または、より正確には、視野角が変化するたびに、フレームごとに)数千の三角形を注文すると、コストがかかりすぎると思います、特にフレームごとにこの順序を GPU にプッシュする必要があるためです。
テクスチャの使用には関心がないことに注意してください (色付きの頂点のみ)。