2012-05-31 31 views
6

私のprevious questionでは、クワッドをテクスチャリングするときに、面が三角形に分解され、テクスチャ座標がアフィン形式で補間されることが確立されました。線形/非線形テクスチャマッピング歪みのある四角形

残念ながら、私はそれを修正する方法がわかりません。 provided linkは有用でしたが、望ましい効果は得られません。著者は、次のように結論付けています。「画像は、長方形の四角形のように見えますが、遠くまで広がっています... ...これは、「奥行き知覚」のために非常に混乱します。

私がしたいのは、テクスチャが元のテクスチャのスケーリングを保持することです。たとえば、台形の場合、テクセルの垂直方向の間隔を同じにしたい(塗りつぶしプログラムで作成した例)。

垂直方向の間隔が同じであるにもかかわらず、テクスチャ空間の直線は、もはやワールド空間の直線ではありません。したがって、私は必要なマッピングが非線形であると信じています。

質問は次のとおりです。固定機能パイプラインでもこれが可能ですか?私は正確な答えがより一般的なクワッドのものであることを正確には確信していません。私は、補間関数が非常に複雑になり、 "オリジナルのスケーリングを保存する"というのは正確なアルゴリズムではないことに気付きました。世界空間の三角形は、テクスチャ空間ではもはや線形ではありません。さておき、私は本当には3 RDと4 番目のテクスチャ座標を理解していないよう

。誰かが私をリソースに導くことができれば、それは素晴らしいことです。

答えて

0

これはかなり複雑な問題です。基本的には、方程式にパースペクティブをもたらすわけではありません。あなたの最後のx、y座標は、回転するときに得られるz値で除算されます。これは、カメラからさらに遠ざかるほどテクスチャ空間(s、t)の変化が小さくなることを意味します。

ただし、このようにすると、効果的にzが直線的に補間されます。私はANCIENT demoを書きました。これは1997年にこれを行いました。これは「アフィン」テクスチャマッピングと呼ばれています。

xとyをzで割っているので、実際には "1/z"を使って値を補間する必要があります。これは、(x &をyで割ったときに)適用されている透視図を適切に考慮に入れます。したがって、あなたは"perspective correct" texture mappingになります。

私はそれよりも詳細に入ることができますが、アルコール乱用の過去15年の奇妙な年の間に私の記憶は少し曇っています;)最近、私はソフトウェアレンダリングを再訪したいと思います。 OpenCLが好きな人たちがやってくるとすぐにレンダリングエンジンを書く良い方法になるだろうと確信しています。

とにかく、私はそれ以上の助けになることはできませんいくつかの助けと謝罪thatsです。

(私が15年前にレンダリングしたことをすべて覚えていたときに、私は今、すべてのリソースを手に入れたことが大好きだったので、インターネットは自分の仕事と生活をずっと簡単にしています。私は最初に1/z補間を試みたが、それが近づくにつれて細かくなり、逆さまにしなければならなかったときに私はそれを断念した。今日まで、私の知識が指数関数的に増加しているので、私はまだ本当に私が "遅い"しかし完全な視点の正しいレンダラーを書いたと思う...いつか私はそれに回り着くだろう;))

幸運!

関連する問題