2012-11-17 3 views
8

glPolygonOffset関数の最初のパラメーターの意味を理解するのが難しいです。glPolygonOffsetのfactorパラメーターの意味と使用

void glPolygonOffset(GLfloat factor, GLfloat units); 

The official documentation因子

各ポリゴンのオフセット可変深さを作成するために使用されるスケール係数を指定することを言います。

、それが適切な頂点の奥行き値から補間された後、各フラグメントの深さ値をオフセットすること

。オフセットの値は、因子×DZ + r×単位であり、DZは、ポリゴンのスクリーン面積に対する深さの変化の測定値であり、rは、所与の値に対して分解可能なオフセットを生成することが保証される最小値である実装。

私はrunitとは何ですか?私が理解できないのはDZです。つまり、「ポリゴンの画面領域に対する深度値の変化の測定」とは何ですか?なぜ因子を0以外の値に設定する必要があるのでしょうか。

私のワイヤフレームをオフセットしたいのであれば、深さの値に単位を追加/追加するだけです。因子パラメータ(および文書で言及されているDZ)の意味、目的、使用例は何ですか?

答えて

8

私はここでいくつかの無知を認めなければならないが、それはそれを説明するthis articleを見つけた。彼らは言う:

視覚的アーティファクトなしで強調表示さ固形物の素敵なレンダリングを実現するために、あなたは固形物(あなたから離れて、それを押す)か、ワイヤーフレームに負のオフセットに正のオフセットを追加するか(プルあなたに向かって)。大きな問題は、「どの程度のオフセットがあるのか​​?」残念ながら、必要なオフセットは、各ポリゴンの奥行き勾配およびワイヤフレーム内の線の幅など、さまざまな要因によって異なります。

そして、彼らは、深さ勾配をこのように説明します。あなたは、多角形を横切るよう

深さ勾配は、xまたはy座標のいずれかにおける変化で割ったZ(深さ)値の変化です。深さの値はウィンドウ座標で、範囲[0、1]にクランプされています。ポリゴンの最大勾配(オフセット式のm)を推定するには、次の式を使用します。m = max {| delV/delS |、| delV/delT |} (ここで、デルが部分的誘導体である)

それらがあると結論:周辺とファークリッピング平面に対して平行であるポリゴンの

を、深さ勾配はゼロです。 [...]クリッピング面に対して大きな角度にあるポリゴンの場合、深度勾配はゼロよりも大幅に大きくなり、より大きなオフセットが必要になることがあります。係数0.75や1.0などの小さなゼロ以外の値は、おそらく別個の深度値を生成し、不快な視覚的アーチファクトを除去するのに十分である。

関連する問題