2012-09-10 5 views
9

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

から、各断片について、様々な値を生成するために使用されるメカニズム:本から補間

のOpenGL ES 2.0プログラミングガイド、私は補間ために、この定義を参照してくださいプリミティブの各頂点に割り当てられた可変値は補間と呼ばれる。

Linear Interpolationthis answerであることを理解していますが、上記の定義はわかりません。

あなたは別の言い方をして、どのような補間方法を詳しく説明しますか?たとえば、私はあなたにこれを説明しようとすることができたよう

+0

一般的な補間は基本的な操作であり、実際にはあなたが説明を求めているのであれば、まずは一般的な数学的知識を深めてから、3Dコンピュータグラフィックスのような複雑なものを掘り下げて調べる必要があります。 –

答えて

10

は、「他の言葉で」一般的な定義については、あなたは...ウェブ上のいくつかを見つけることができる:

あなたは限られた量のデータを持っているときは、補間を使用します

補間のためには、常に2ヒントが必要です(ヒントは "線です")。補間のためには常にヒントが必要です。 )は、それらがベクトルAとBであると言うことができます。今度は、実数 's'が両方向に無限の線を得るための解はT(s) = A + s*(B-A)です。 AとBの間の線を得るには、T(0)=AT(1)=Bとこれが線形補間であるように、間隔[0、1]で 's'を定義する必要があります。私がここに書くことについての思い何その後、

注GLで使用されるアルゴリズムとあなたのGPUははるかに複雑であり、最適化されたことが、一般的に持っている:あなたは、OpenGLに少しを見ることができますもう少し複雑な補間については

同じ結果。

シェイプの場合は、通常、3つのベクトル(頂点)で定義された三角形を使用し、それが三角形(三角形であると言う)を描画メソッドで使用します。それらのベクトルにいくつかの行列を適用すると、描画バッファ上に2次元投影が得られます(頂点シェーダで起こる可能性があります)。今度は、バッファ内のすべてのポイントに色、テクスチャ、または色の補間を行う必要があります。まず、描画された点(バッファ上の実際の位置)は線形補間機構の結果です(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()); 

この機構は、再び線形補間(非常に低速を表します実際には1つしかありませんが、それはすごく便利です)

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

色と同じ補間メカニズムを使用すると、法線の「不変」は「不変」ではなく、違うメカニズム(非線形)を使用するようになります。この特定のケースでは、単純に線形フラグメント結果を正規化して必要な結果を得ることができますが、この特定のケースでは、フラグメント位置から法線を計算することもできます(数学的に表現可能な任意の形状に対して行うことができます)。しかし、実際には、滑らかな部分とエッジを持ち、いくつかの素晴らしい効果を表す異なるサイズの法線を持つかもしれない奇妙な形状を得ることになるので、形状に異なるパラメータを補間するための大きなメカニズムがあります。

また、補間機構は、限られた数のデータ(これらのメカニズムの1つを「線形補間」と呼ぶ)を知ることによって無限の数の結果を生成できるメカニズムです。換言すれば、あなたは、もう少し具体的な例に転記とおり

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

+0

ありがとうMatic、これは本当に印象的です。説明のいくつかの部分については、それは私が現時点で消化するにはまだ複雑すぎる、私はこれを参考にしておくつもりです、私はそれがOpenGLでもっと深くなるときに必要になると思います。 – neevek

+1

良い説明、あなたは過去に私のupvoteを持っている:)しかし、小さな修正:AとB *(AとBの点を含む)*間の線を得るための間隔は 's∈[0,1]'です。 0のため、最初の頂点である 'A + 0(B-A)= A'; 1については、A + 1(B-A)= A + B -A = Bであり、反対のものである。 –

+0

@ハイ・エンジェル訂正していただきありがとうございます、私はそれを見逃してどのような考えがありません。私は今それを修正した。 –

関連する問題