1. ホーム
  2. c

[解決済み] glPolygonOffsetのfactorパラメータの意味と使い方

2022-02-19 20:48:21

質問

の最初のパラメーターの意味がよくわからないのですが。 glPolygonOffset 関数を使用します。

void glPolygonOffset(GLfloat  factor, GLfloat units);

公式ドキュメント によると、その要因

各ポリゴンの可変深度オフセットを作成するために使用されるスケールファクターを指定します。

で、その

各フラグメントの奥行き値は、該当する頂点の奥行き値から補間された後、オフセットされます。ここで、DZはポリゴンの画面領域に対する奥行きの変化の測定値、rは与えられた実装で解決可能なオフセットを生成することが保証されている最小の値である。

を理解しました。 runit があります。私が理解できないのは DZ は、つまり、ポリゴンの画面領域に対する深度値の変化の測定は何を意味するのか、そして、なぜfactorを0以外に設定する必要があるのか、ということです。

ワイヤーフレームをオフセットさせたい場合、必要なのは深度値に数単位を加算/減算することだけですよね? factorパラメータ(およびドキュメントにあるDZ)の意味、目的、使用例について教えてください。

どのように解決するのですか?

私はここでいくつかの無知を認めなければならないが、私は見つけた。 この記事 というのがあり、それについて説明しています。彼らが言うには

ハイライトされたソリッドオブジェクトをビジュアルアーチファクトなしできれいにレンダリングするには、ソリッドオブジェクトに正のオフセットを加える(自分から遠ざける)か、ワイヤーフレームに負のオフセットを加える(自分に向かって引っ張る)かのどちらかを選択します。残念ながら、必要なオフセットは、各ポリゴンの深度スロープやワイヤフレーム内の線の幅など、さまざまな要因に依存します。

そして、奥行きの傾斜をこのように説明しています。

深度勾配とは、ポリゴンを横断する際のz(深度)値の変化を、xまたはy座標の変化で割ったものです。深度の値はウィンドウ座標で、範囲 [0, 1] にクランプされています。ポリゴンの最大深度勾配(オフセット方程式のm)を推定するには、次の式を使用します: m = max {|delV / delS|,|delV / delT|}. (ここで、delは偏微分)

という結論になるそうです。

近景と遠景のクリッピング平面に平行なポリゴンでは、深さの傾きはゼロになります。[クリッピング平面に対して大きな角度を持つポリゴンでは,奥行き勾配が0よりかなり大きくなり,より大きなオフセットが必要になる場合があります.0.75や1.0のような小さなゼロでない値をfactorに設定すれば、おそらく明確な深度値を生成し、不快な視覚的アーティファクトを除去するのに十分でしょう。