2011-01-20 12 views
2

私は四角形を作成するために三角形ストリップを使用しています。問題は、シェイプ上に均等に補間したい長方形のテクスチャを使用してペイントしようとするときです。三角形ストリップから作成されたクワッド上のOpenGL ES 1.1のテクスチャ変形に関する問題

形状が矩形または矩形のアフィン変換である限り、形状を構築する2つの同じ三角形があり、すべてがうまくいきます。しかし、任意の形状では、三角形の形状が異なり、三角形の共通の辺に沿って歪みが自然に発生します。

_____  ______  _____ 
    |  | / /  \ /
    |_____| /_____/   \_/ 

    Ok   Ok   Not Ok 

私はES 2.0のカスタムシェーダでこの問題を回避するためにかなり簡単だろうと想像が、どのように私はES 1.1でそれを達成していますか?

+0

それでは、どのように解決しましたか? – Trainee4Life

答えて

2

パースペクティブ/デプス情報を入力しないと、ハードウェアはテクスチャ座標の線形補間のみを行うことができます。

線形補間では、問題の原因となるケースを適切に処理できません。

あなたのエッジを適切に補間するには、あなたのクワッドにパースペクティブ情報を導入する必要があります。

詳細については、このNVidiaホワイトペーパーProjective Texture Mappingを参照してください。

+0

素晴らしい!その参照をありがとう。 – Nuoji

2

正方形/長方形のテクスチャを任意のクワッドにマップする1つの方法は、射影補間です。私はこれを行う方法を示すan articleを書いています。これは、補間を設定するための数学に焦点を当てていますが、rotoglupの答えにリンクされている「射影テクスチャマッピング」の論文は、補間を行うためのAPIの設定に焦点を当てています。

ショートバージョンは:あなたは(あなたが気づいたかもしれないとして、ないは二つの三角形の間に目に見える継ぎ目を作るん)GPUはパースペクティブ補正のレンダリングのためにそれを行う方法に類似した方法でクワッド間でUVを補間します。これを行うには、クワッドの各頂点に対して誤った「深度」値を計算し、この「深度」に基づいて同次座標を使用して補間を実行する必要があります。完全な詳細は上の記事にあります。

OpenGL ES 1.1では何が可能かどうかはわかりませんが、3次元または4次元のUV値を指定して投影テクスチャをサポートしている場合は、これを適用する必要があります。

+0

FWIW、私は私の答えで壊れたリンクを更新しました。 – rotoglup

+0

@rotoglupよかった、ありがとう。この記事では、APIの側面に焦点を当てていますが、私の場合は数学に重点を置いているようです。 –

関連する問題