2013-03-28 146 views
4

我在寫一個處理2D圖形的庫。標準化設備座標

我只是想知道爲什麼要我的座標系的範圍從[-1,1]用於x兩軸和y軸 enter image description here

代替[0,寬度] x和[0,高度]爲y? enter image description here

我去了後一個系統,因爲我覺得這是直接實現。

+1

爲什麼不Y的增加,爲什麼,因爲它向下移動,因爲它在屏幕空間?數學上更簡單。這就是我們屏幕和世界空間轉換的原因,以便我們可以使用任何座標系對每個對象都有意義。 –

+2

如果我將只使用你的庫,我怎麼能寫一個程序,將顯示不同分辨率的相同圖像沒有normalzied座標? – acrilige

+1

@MichaelDorgan我不確定你的意思。 – Jonas

回答

6

來自Jim Blinn的A Trip Down The Graphics Pipeline,p。 138.

讓我們從看起來最簡單的轉換開始:標準化設備座標到像素空間。變換是

s_x * X_NDC + d_x = X_pixel 
s_y * Y_NDC + d_y = Y_pixel 

用戶/程序員確實在NDC所有屏幕設計。有跡象表明,NDC從我們隱藏了硬件三個討厭的現實:

  1. 實際在Xÿ像素數。在Xÿ

  2. 非均勻象素間距。

  3. 向上而同期Ÿ協調下來。如果需要,NDC到像素的變換將倒置Y,以便NDC中的Y指出。

...

s_x = (N_x - epsilon)/2 
d_x = (N_x - epsilon)/2 

s_y = (N_y - epsilon)/(-2*a) 
d_y = (N_y - epsilon)/2 

epsilon = .001 
a = N_y/N_x (physical screen aspect ratio)