2012-02-21 81 views
5

起初,我想知道爲什麼NDC的範圍從-1到1,而不是從0到1.我想可能是中心的原點對某些東西有用。爲什麼標準化設備座標系統是左手的?

但爲什麼它使用左手座標系?

難道這只是爲了讓遠處的物體的Z值更高嗎?這對我來說是一個足夠好的理由。

+0

我不明白中心原點是如何意味着它是「左手」... – 2012-02-21 20:44:21

+0

我從來沒有暗示過這一點。看到這裏:http://www.songho.ca/opengl/gl_projectionmatrix.html改寫我的問題。 – 2012-02-21 20:46:30

+1

爲什麼右撇子系統會更好? – cmannett85 2012-02-21 20:48:02

回答

11

但爲什麼它使用左手座標系?

讓我們在該問題上添加「默認」。因爲所有需要改變的是glDepthRange(1.0f, 0.0f);,現在你是右撇子。是的,這是完全合法的GL語法;從來沒有限制z接近的範圍小於z的範圍。

爲什麼默認情況下是左撇子?也許ARB的某個人喜歡這樣。也許ARB上的某個人喜歡增加深度範圍而不是減小,而左下角的方向就是這樣做的。也許是因爲OpenGL的祖先IRIX GL這樣做了,ARB沒有看到任何需要改變的地方。

其原因並不重要;慣用手純粹是符號方便。在一些地方,右撇子是有道理的。在其他情況下,左撇子是有道理的。而且由於它被輕微改變,只要使用適合你的東西。

然後它會和其他所有東西一致。

符合什麼什麼?所有被刪除的固定功能的東西?

視口轉換全部由OpenGL在內部完成,沒有人可以在這裏完成。你甚至不提供矩陣;您只需提供一個視口和深度範圍。所以從使用固定功能GL的人來看,一切都是右傾的。

只有在直接處理頂點着色器時,你必須知道剪輯空間的指向性是什麼。在這種情況下,旋向的變化是透視投影的一個簡單函數,否定Z.或者,如果您喜歡左手座標,則透視投影而不是否定Z.或者,再次,僅顛倒glDepthRange,現在你是右撇子。

7

但爲什麼它使用左手座標系?

因此,增加從投影平面在視圖方向上的距離映射到增加深度緩存的值。

難道只有這樣才能使Z值遠離更遠的物體?這對我來說是一個足夠好的理由。

那麼,這正是它的原因。

0

猜測handual的變化屬於圖形卡如何解釋z值。更大的z值 - >更大的深度。隱含的改變手性可以通過投影矩陣來執行而不需要額外的成本。稍後更改它將增加一個額外的計算步驟。