2010-11-29 16 views
8

深度ソートを使用して基本的なオブジェクト透明度を行っています。深さのI /(Z1 + Z2 + Z3)、(Y1 + Y2 + Y3)/ 3、/ 3カメラからiは、{(X1 + X2 + X3)として計算モデルの三角形のすべての中心に(二乗)距離を使用します3}。結果はほぼ良好ですが、いくつかの間違いがあります。 sortingOpenGL深度ソート

をソートして no sorting

をソートせずに

猿の頭は私がこれらのエラーについて何かできることはありますか?

+1

固定機能またはプログラマブルパイプライン? – genpfault

+0

が修正されました。私は、距離の配列を作成し、それを並べ替えると、インデックス配列内の対応する値を交換、最後にglDrawElements。 – spacevillain

答えて

6

完璧な方法で三角形をソートする方法はありません。 opengl.org wikiのTransparency Sortingの記事の最後の例を見てください。

@kos: Order Independent Transparency with Dual Depth PeelingAlpha to Coverageをご覧ください。

+0

それでは、任意の透明度を適切にレンダリングする単一の解決策はありませんか? – Kos

+1

@Kos:http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/とhttp://blog.icare3d.org/2010/07/opengl-40-abuffer- v20-linked-lists-of.html – Stringer

2

あなたは画面整列粒子を持っている場合を除き、任意の三角形をソートすることは実際にはかなり困難です。完璧な結果を得るには、三角形の分割を開始する必要があります。

@tiburが言うように、あなたはいくつかの簡単な近似で逃げることができますが、order-independent transparency(OIT)はあまりにもまともなソリューションです。ただし、OpenGL 3時代のグラフィックス機能が必要です。私はいくつかの方法を示しimplementation available on githubは、正確な OITはかなり速いようにする必要があります。

"adaptive transparency"、 "multi-layer alpha blending"、 "hybrid transparency"をご覧ください。これらは、おおよその近似解ですが、一般的な場面では非常に良い結果をもたらします。


いくつかの類似した質問...

0

あなたはそれをソート助けることができる体について何かを知っていれば、数学的に言えば。

は、例えば立方体の面が深さは、単独重心(面中心)でソートすることができます。正方形の面Aの中心がBの中心より近くにある場合、BはAの前に決して存在しません(また、立方体の場合)。

実際に凸面の場合、面はオリエンテーションだけでソートされています。

関連する問題