10

OpenGL ES 2.0 の学習を始めたばかりですが、その過程で、定義があっても意味をなさない用語に出会いました。このように:補間

OpenGL ES 2.0 Programming Guideから、補間の次の定義が表示されます。

プリミティブの各頂点に割り当てられた可変値から各フラグメントの可変値を生成するために使用されるメカニズムは、補間と呼ばれます。

this answerLinear Interpolationの意味は理解できますが、上記の定義は意味がありません。

別の言い方をすれば、補間とは何かを詳しく説明する例を作っていただけますか?

4

1 に答える 1

12

「言い換えれば」一般的な定義については、ウェブ上でいくつか見つけることができます..たとえば、私はこれをあなたに説明しようとすることができます:

限られた量のデータを無制限の量のデータで表現しようとしている場合、補間を使用します。たとえば、線を表す 2 つのポイントがあります。

補間の場合、常に表現のヒントが必要です.2つの点が必要な線の場合(ヒントは「線です」)、それらがベクトルAとBであるとしましょうT(s) = A + s*(B-A)。両方向に無限のラインを取得します。A と B の間の線を取得するには、区間 [0, 1] で 's' を定義してT(0)=AT(1)=Bこれが線形補間になるようにする必要があります。

もう少し複雑な補間については、openGL を少し調べることができます。

GL と GPU で使用されるアルゴリズムは、ここで記述しようとしているものよりもはるかに複雑で最適化されていますが、通常は同じ結果になることに注意してください。

形状の場合、通常は 3 つのベクトル (頂点) で定義された三角形を使用し、それが三角形であると言います (描画メソッドで「三角形」と呼びます)。これらのベクトルにいくつかのマトリックスを適用すると、描画バッファーに 2D 投影が得られます (頂点シェーダーで発生する可能性があります)。ここで、バッファ内のすべてのポイントを色、テクスチャ、または色の補間で埋める必要があります。まず第一に、描画されたすべてのポイント (実際にはバッファー上の位置) は、線形補間メカニズムの結果です (GL では制御できません)。次に、どの色が塗りつぶされるかについては、通常は線形補間です。

カラー ポインタを設定して、異なる色の頂点を持つ三角形を描いてみてください。位置の補間に応じて色を線形補間した結果、サーフェス全体で滑らかなカラー スペクターが得られます (描画する必要がある各ピクセルのフラグメント シェーダーで位置補間の結果を取得します)。次のように、この色補間結果を手動で実現できます。

入力:

Vector a, b, c; //original triangle positions
Vector interpolationABC; //current fragment interpolation between a, b and c
Color colorA, colorB, colorC; //colors for vectors a, b and c

出力 (このフラグメントの色):

Color output = (
(a - interpolationABC).length() * colorA + 
(b - interpolationABC).length() * colorB + 
(c - interpolationABC).length() * colorC ) 
/ (
(a - interpolationABC).length() + 
(b - interpolationABC).length() + 
(c - interpolationABC).length() );

このメカニズムも線形補間を表しています (実際には非常に遅いものですが、うまくいくはずで、非常に読みやすいです)。

非線形補間の例については、少し想像力が必要です。球を描いているとしましょう。簡単にするために、中心が (0,0,0) にあり、半径が 1 であるとしましょう。球は N 個の三角形で作成され、N が十分に大きくない場合 (ほとんどの場合)、パフォーマンスの問題のために少し「ぎこちない」ので、少し滑らかにしたいと思います。そのため、いくつかのライトをオンにし (とにかくライトのない単なる円です)、法線を設定する方法を理解する必要があります。一方では、3 点で定義されたサーフェスの法線を計算できます。各三角形には固有の法線がありますが、「ディスコ ボール」効果が生成されます。他方では、球体の任意の点 'P' の法線はnormalized(P-center)またはこの場合はポイント自体。したがって、各頂点法線は頂点の位置自体であり (したがって、各三角形には 3 つの異なる法線があります)、各フラグメントの法線はこれらの法線の補間です。

色と同じ補間メカニズムを使用すると、法線の長さが「一定」ではないことがわかり、欠陥が生じ、別のメカニズム (非線形) を使用せざるを得なくなります。この特定のケースでは、これらの線形フラグメントの結果を単純に正規化して、必要な結果を得ることができますが、この特定のケースでは、フラグメントの位置から法線を計算することもできます (数学的に提示可能な任意の形状に対して実行できます)。しかし、実際には、滑らかな部分とエッジを持ち、驚くべき効果を表現するために異なるサイズの法線を持つ奇妙な形状が得られることを知っておいてください。そのため、形状にさまざまなパラメーターを補間するための優れたメカニズムがあります。

繰り返しますが、補間メカニズムは、限られた数のデータのみを知ることで無制限の数の結果を生成できるメカニズムです (これらのメカニズムの 1 つを「線形補間」と呼びます)。または、言い換えれば、もう少し具体的な例を投稿したように:

プリミティブの各頂点に割り当てられた可変値から各フラグメントの可変値を生成するために使用されるメカニズムは、補間と呼ばれます。

于 2012-09-10T11:16:07.867 に答える