10

正方形のテクスチャでGL_QUAD(台形の形をしている)をレンダリングしようとしています。これを実現するためだけにOpenGLを試してみたいと思います。現在、テクスチャがひどく歪んでいて、本当に迷惑です。

通常、私はホモグラフィを計算するテクスチャをロードしますが、それは多くの作業と追加の線形計画法ライブラリ/直接線形変換関数を意味します。私は、OpenGLがこのプロセスを単純化できるという印象を受けています。

私はWebを見回して、「パースペクティブ-正しいテクスチャリング、Q座標、およびGLSL」「OpenGLでの歪んだ/せん断されたテクスチャマッピング」を見てきました。

これらはすべて、ある種のホモグラフィ計算を行うか、OpenGLの一部を使用することを前提としているようです...何かアドバイスはありますか?

アップデート:

「画像空間の単純化とモーフィングを使用した静的環境のナビゲート」 [ PDF ]-9ページの付録Aを読んでいます。

(s、t、r、q)テクスチャ座標にモデルのワールドスペースzコンポーネントの頂点を乗算することにより、遠近法の修正を無効にしているように見えます。

したがって、台形の形をしたクワッドの特定のテクスチャ座標(s、r、t、q)に対して、4つのコンポーネントは次のようになります。

(0.0f, 0.0f, 0.0f, 1.0f),
(0.0f, 1.0f, 0.0f, 1.0f),
(1.0f, 1.0f, 0.0f, 1.0f),
(1.0f, 0.0f, 0.0f, 1.0f) 

これはglTexCoord4f(s vert.z、r vert.z、t、q * vert.z)と同じくらい簡単ですか?それとも私はいくつかのステップを逃していますか?GL_TEXTURE glMatrixModeをいじるような?

アップデート#2:

それがトリックでした!皆さん、この問題はWeb全体にあり、簡単な答えはありませんでした。ほとんどの場合、元の形状と変換された形状の間のホモグラフィを使用してテクスチャを直接再計算します...別名、多くの線形代数と外部のBLASlib依存関係。

4

3 に答える 3

11

ここに問題と解決策の良い説明があります。

http://www.xyzw.us/~cass/qcoord/

作業リンク: http://replay.web.archive.org/20080209130648/http: //www.r3.nu/~cass/qcoord/

キャスによって作成された上記のリンクから部分的にコピーおよび適合

テクスチャマッピングのより興味深い側面の1つは、テクスチャ座標が存在する空間です。私たちのほとんどは、テクスチャ空間を単純な2Dアフィン平面と考えるのが好きです。ほとんどの場合、これは完全に受け入れられ、非常に直感的ですが、問題が発生する場合があります。

たとえば、空間座標では台形であるが、テクスチャ座標では正方形であるクワッドがあるとします。

OpenGLは、クワッドを三角形に分割し、テクスチャ座標(ds / dx、ds / dy、dt / dx、dt / dy)の傾きを計算し、それらを使用してポリゴンの内部のテクスチャ座標を補間します。左下の三角形の場合、dx=1およびds=1ですが、右上の三角形の場合、dx <1、ds = 1です。これにより、右上の三角形のds/dxが下の三角形のds/dxよりも大きくなります。これにより、テクスチャマッピング時に不快な画像が生成されます。

通常、r=0とq=1defaultsはそのままにしておきますが、テクスチャ空間は単なる2Dアフィン平面ではありません。それは本当に完全な射影空間(P3)です!上の頂点のテクスチャ座標を(0、1)と(1、1)の(s、t)座標として指定する代わりに、(s、t、r、q)座標として指定できるので、これは良いことです。 (0、幅、0、幅)と(幅、幅、0、幅)の!これらの座標はテクスチャ画像の同じ場所に対応していますが、ds/dxに何が起こったのかを見てください。両方の三角形で同じになりました。どちらも同じdq/dxとdq/dyを持っています。

それはまだz=0平面にあることに注意してください。この手法を遠近法カメラの投影で使用すると、「誤った奥行き知覚」が発生するため、非常に混乱する可能性があります。それでも、(s、t)だけを使用するよりも良い場合があります。それはあなたが決めることです。

于 2011-09-11T15:30:01.003 に答える