1

グリッド スクリーン アライン メッシュにマップされたテクスチャがあるとします。次のようになります。

元の画像

頂点の位置は次のとおりです。

(-1, -1), (1, -1), (-1, 1), (1, 1)

UV:

(0, 0), (1, 0), (0, 1), (1,1)

頂点の周りを移動して画像をワープし、 を実行して出力を保存しますglReadPixels()

新しい歪んだ頂点の位置は次のとおりです。

(-1, -1), (0.8, -0.8), (-0.6, 0.6), (0.4, 0.4)

そして、生成された出力は次のようになります。

ゆがんだ画像

次回は、先ほど保存したゆがんだ画像を入力として使用します。私がやろうとしているのは、頂点座標を変更することによって、以前に行ったワープ効果を逆にすることです。最初は、画像の歪みを解消する座標は次のようなものでなければならないと考えていました。

x_unwarp = 2 * x_original - x_warped

しかし、それは機能していません。ワープ効果は元に戻りません。私が得るものは次のようなものです:

アンワープしようとした

私が間違っていることと、頂点座標またはおそらくUVをどのように変更する必要があるか考えていますか? 私は数学を間違っていると確信しています。

ありがとう!

アップデート

私の式が間違っているようです。私は行列を使うべきだった:

transform_matrix * x_original = x_warped

その後:

x_unwarped = inverse(tranform_matrix) * x_original

私が行っている変換は純粋なスケーリングであるため、変換行列は次のようになります。

/     \
| S  0 |
| 0  S |
\      /

ここで、S は倍率です。したがって、逆は次のようになります。

/         \
| 1/S  0  |
| 0   1/S |
\         /

したがって、これは次のようにワーピング頂点の位置を与えます。

(-1, -1), (1.25, -1.25), (-1.67, 1.67), (2.5, 2.5)

よりまっすぐに見えますが、それでも正しくありません:

ワープ解除の 2 回目の試み

2回目の更新

私は最初からそれを間違って始めたようです。すべてのレンダリングにはランダム要素が含まれています。私はそれを修正して、もう一度試してみます。

更新: UV ワ​​ープ

今回はUVワープで作ってみました。

これらの UV を使用してワープ:

(0.0, 0.0), (0.9, 0.0), (0.0, 0.8), (0.7, 0.7)

これにより、次のものが生成されました。

ゆがんだ紫外線

そして、逆を使用してワープを解除しようとしました:

(0.0, 0.0), (1/0.9, 0.0), (0.0, 1/0.8), (1/0.7, 1/0.7)

次のようになります。

失敗した UV アンワープ

これもできませんでした。見落としている 1/0 のケースが気になり始めています。

完全に無知。

4

2 に答える 2

2

実行している 1 つのことは、パースペクティブの不適切なテクスチャ マッピングです (最初の図では、クワッドを構成する 2 つの三角形のそれぞれに対してテクスチャ座標が異なる方法で補間されていることがわかります)。大きな単一のクワッドで遠近補正を使用するか (フラグメント シェーダーを使用し、そこにアルゴリズムを実装する)、クワッドを小さなパッチに分割することができます。

次のように考えると、テクスチャ ワーピングを逆にするのは簡単です。最初のステップで調整された歪みが、2 番目のステップの UV 座標になります。もちろん、これには、特定の範囲内の歪み頂点の位置を理解する必要があります。OpenGL 変換パイプラインを思い出してください。

モデルビュー → 投影 → クリッピング → 正規化されたデバイス座標。画面スペースは最後のステップで、ビューポートの寸法が適用されます。NDC 座標は [-1,1] の範囲にありますが、[0,1] の範囲に到達するのは簡単です: (x+1)/2

つまり、変換パイプラインを実行することです (クリッピングは省略できますが、パースペクティブ分割を適用する必要があります)。これにより、歪み除去のための UV 座標が得られます。

于 2011-11-04T10:27:58.767 に答える
1

私があなたの問題を正しく理解している場合 (私の答えが単純すぎると感じているため、これは確かではありません:p)、テクスチャ マトリックスを適用してテクスチャを単純に変更してみませんか (つまり、平行移動、回転、せん断で UV を変換します)。など、必要に応じて行列) に適用されるクワッドを移動する代わりに ?

これにより、変換を逆にすることが、元の変換行列を逆にするという簡単な問題になります。

于 2011-11-04T09:01:20.823 に答える