人眼到視平面的距離視固定的(視距),視平面左右兩個邊緣到人眼的連線得到的角度是視角。 一般我們設定視角來計算視距。 為了方便,我們一般取人眼位置為 z 軸原點,這樣,物體距離眼睛的距離(物距)還有物體在視平面上投影的長度(像長)以及 物體的實際長度(物長)的關係就是這樣: 像長:像距 = 物長:物距 即 像長 = 物長 * 像距 / 物距 (1) 假設我們的視角寬度用x方向(一般哺乳類都是如此,因為兩眼是x方向排列的),那麼有這樣的關係: (視平面寬度/2) /像距 = tan(視角/2) 於是: 像距 = (2/視平面寬度) * tan(視角/2) (2) (2) 帶入 (1) 就可以得到: 像長 = 物長 * (2/視平面寬度) * tan(視角/2) / 物距 這樣我們就可以知道,當視角已知的時候,一個高為 h 的物體在視平面上的投影是多高了。 這是正投影的做法,但是實際上人類的眼睛看到的世界不是這樣的。把視平面當成是一個球面,每一點的計算公式仍然和上面的一樣,這樣計算出來的結果才能更準確地反映寬視角地情形,一般人類地視角是120度的,但是用正投影的話,視角一般只能設定到75度左右。 這就是為什麼我們玩 CS 的時候總是覺得視角有點窄,看不到旁邊的人的緣故緣故。沒有餘光對人類來說是很不方便的。 在手機遊戲裡面廣泛使用的視線跟蹤演算法,用的就是第二種演算法。 遠的東西看起來小是因為物距比較大,像比較小,視角是視力範圍的衡量標準
人眼到視平面的距離視固定的(視距),視平面左右兩個邊緣到人眼的連線得到的角度是視角。 一般我們設定視角來計算視距。 為了方便,我們一般取人眼位置為 z 軸原點,這樣,物體距離眼睛的距離(物距)還有物體在視平面上投影的長度(像長)以及 物體的實際長度(物長)的關係就是這樣: 像長:像距 = 物長:物距 即 像長 = 物長 * 像距 / 物距 (1) 假設我們的視角寬度用x方向(一般哺乳類都是如此,因為兩眼是x方向排列的),那麼有這樣的關係: (視平面寬度/2) /像距 = tan(視角/2) 於是: 像距 = (2/視平面寬度) * tan(視角/2) (2) (2) 帶入 (1) 就可以得到: 像長 = 物長 * (2/視平面寬度) * tan(視角/2) / 物距 這樣我們就可以知道,當視角已知的時候,一個高為 h 的物體在視平面上的投影是多高了。 這是正投影的做法,但是實際上人類的眼睛看到的世界不是這樣的。把視平面當成是一個球面,每一點的計算公式仍然和上面的一樣,這樣計算出來的結果才能更準確地反映寬視角地情形,一般人類地視角是120度的,但是用正投影的話,視角一般只能設定到75度左右。 這就是為什麼我們玩 CS 的時候總是覺得視角有點窄,看不到旁邊的人的緣故緣故。沒有餘光對人類來說是很不方便的。 在手機遊戲裡面廣泛使用的視線跟蹤演算法,用的就是第二種演算法。 遠的東西看起來小是因為物距比較大,像比較小,視角是視力範圍的衡量標準