2009-11-19 84 views
0

所以我要在3D空間中一組的四點意見。矩陣來表示一個三角形在屏幕空間中

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

哪我然後正投影屏幕有效地給我在屏幕空間兩個線框三角形。

我現在想要一個紋理映射到這個「面」由兩個三角形。所以,我把我的方形紋理,並且使用U,V座標我可以紋理映射到這兩個三角形。

問題是當我嘗試Z分量添加到verticies。屏幕空間中產生的三角形現在有些失真,但紋理映射完全關閉。

在我看來,雖然,由於它只是3分,他們仍然形成某種形式的仿射矩形,我們可以代表矩形作爲形式的矩陣:

[AB 0] [CD 0 ] [TX TY 1]

誰能給我一些建議,關於如何在屏幕空間轉換三個二維點到矩陣在上面的表格想法?

所有的教程等,我已經擡起頭來解釋紋理映射的鬆散理論,然後讓OpenGL的/ DirectX的本地函數執行實際的映射。

我正在尋找更多的地方給出三點直接的辦法,我可以使用的仿射矩陣映射texure到三角形。 (不做掃描線渲染方法)

謝謝!

回答

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 
+0

酷,謝謝。 所以看起來我必須再做兩件事才能使它工作。 第一個是翻轉你給我的矩陣(這是微不足道的)。 [b e 0] [c f 1] 第二種是將未改變空間中多邊形的原始增量X歸一化爲a和c,並將原始增量Y的b和d歸一化。 – Jon 2009-11-19 21:14:22

相關問題