0

だから私は3D空間に4つのポイントのセットを持っています。

P1 [0、0、0]
P2 [128、0、0]
P3 [0、128、0]
P4 [128、128、0]

次に、これを正射投影で画面に投影すると、画面スペースに2つのワイヤーフレームの三角形が効果的に表示されます。

次に、2つの三角形で構成されるこの「平面」にテクスチャをマッピングします。正方形のテクスチャを取得し、u、v座標を使用して、テクスチャをこれら2つの三角形にマッピングできます。

問題は、頂点にazコンポーネントを追加しようとすると発生します。画面空間に表示される三角形は多少歪んでいますが、テクスチャマッピングは完全にオフになっています。

たった3点なので、それでもある種のアフィン長方形を形成し、その長方形を次の形式の行列として表すことができるように思えます。

[ab 0] [cd 0] [tx ty 1]

画面空間の3つの2Dポイントを上記の形式の行列に変換する方法について、ヒントやアイデアを教えてもらえますか?

私が調べたすべてのチュートリアルなどは、テクスチャマッピングの大まかな理論を説明してから、OpenGl/DirectXネイティブ関数に実際のマッピングを実行させます。

私は、3つのポイントが与えられた場合に、アフィン行列を使用してその三角形にテクスチャをマッピングできる、より直接的なアプローチを探しています。(スキャンラインレンダリングアプローチを実行していません)

ありがとう!

4

1 に答える 1

1

何を探しているのか正確にはわかりませんが、(u、v)座標から画面座標に変換する方法は次のとおりです。

P1、P2、P3を画面座標に投影し、画面座標(x1、y1)、(x2、y2)、および(x3、y3)で3つのポイントを取得したとします。

今、私たちはフォームからの変換が必要です

[a、b、c] [d、e、f] [0、0、1] * [u、v、1] = [x、y、1]

(0,0)(x1、y1)に変換したい; (1,0)から(x2、y2)および(0,1)から(x3、y3)。(これは、テクスチャの三角形を投影された三角形にマップするためです)。

したがって、すべての方程式を記述します。

0 a + 0 b + 1 c = x1
0 d + 0 e + 1 f = y1
1 a + 0 b + 1 c = x2
1 d + 0 e + 1 c = y2
0 a + 1 b + 1 c = x3
0 d + 1 e + 1 f = y3

そして、それらを解決して、次のようにします。

a = x2-x1
b = x3-x1
c = x1
d = y2-y1
e = y3-y1
f = y1
于 2009-11-19T18:40:37.153 に答える