由於您需要的信息直接保存在投影矩陣中,因此您可以比視角更容易地做到這一點。
因此給你的投影矩陣看起來就像這樣:
xScale 0 0 0
0 yScale 0 0
0 0 -(zf + zn)/(zf - zn) -(2 * zf)/(zf-zn)
0 0 -1 0
其中Z-遠(ZF)和z近(ZN),xScale等和yScale是已知的。
要選擇正確的Z-Depth,我們首先確保w結束爲1.這樣,當我們通過w進行除法時,它不會改變任何東西。
幸運的是,w很容易找到。它只是輸入z的負數。因此,將-1輸入到z將返回1的w。
我們假定您使用的分辨率爲1024x768,並且您想要的正確比例的紋理爲256x256。
我們還會進一步假設您的矩形在左上角位置-1,1和右下角位置1,1處設置。
因此,讓我們插入這些東西並計算出z。
如果我們使用以下命令:
-1, 1, -1, 1
1, -1, -1, 1
我們會得到了一些東西,如下所示。
1/xScale, -1/yScale, someZThatIsn'tImportant, 1
-1/xScale, 1/yScale, someZThatIsn'tImportant, 1
視口變換變換的那些值,使得-1,1爲0,0和1,-1是1024,768
因此,我們可以看到,通過執行工作((X + 1)/2)* 1024和((1-y)/ 2)* 768
所以,如果我們假設xScale爲3/4,yScale爲1,我們可以看到通過插入它我們會得到以下:
左上:
x = -3/4
=> ((-3/4 + 1)/2) * 1024
=> 128
y = 1
=> ((1 - 1)/2) * 768
=> 0
對於右下:
因此你可以看到,我們在屏幕中心的768x768像素的圖片。很顯然,獲得256x256我們需要得到的w爲3,所以後w分割我們有這些座標的三分之一的大小((xScale * 1024)/ 256應該等於(yScale * 768)/ 256得到一個正方形。投影
所以,如果我們最後的座標如下:
-1, 1, -3, 1
and
1, -1, -3, 1
,我們會得到下面的輸出(W-分後):
-0.25, 0.333, unimportantZ, 1
and
0.25, -0.333, unimportantZ, 1
運行那些通過屏幕以上等式和我們得到
對於左上:
x = -0.25
=> ((-0.25 + 1)/2) * 1024
=> 384
y = 0.3333
=> ((1 - 0.3333)/2) * 768
=> 256
對於右下:
x = 0.25
=> ((0.25 + 1)/2) * 1024
=> 640
y = -0.333
=> ((1 + 0.33333)/2) * 768
=> 512
640 - 384 = 256
512 - 256 = 256
因此我們現在在正確的像素大小的矩形最後...
哇,很好的答案,謝謝 – Sam 2010-01-21 10:19:19