2010-01-27 38 views
67

OpenGL的設計者從來不害怕數學,線性代數的知識對於除最簡單的OpenGL應用程序之外的所有人都是必不可少的。我認爲可以安全地假定OpenGL程序員熟悉弧度角度。爲什麼OpenGL使用度數而不是弧度?

在數學上,弧度比各個方面都更優雅。它們也具有實際優勢:

  • C標準庫使用弧度。
  • 幾乎任何其他庫都使用弧度。
  • 在一些計算中,輻射者更方便,例如,圓弧的長度。

那麼爲什麼OpenGL設計師決定指定像glRotatefgluPerspective這樣的函數來使用度?

(我知道這是沒有實際意義,而且它不會無論如何改變,我只是好奇,我無法找到OpenGL.org答案。)

+0

雖然我從來沒有使用過非常多的OpenGL - 我也想知道爲什麼度數而不是弧度!正如你所說,顯而易見,弧度在每個方面都更加優雅。 – sabiland 2010-01-27 12:54:58

+4

對於投票結束的人來說:這是一個真正的問題,並且在那裏必須有一個確定的和決定性的答案。也許在SGI的一些會議上有幾分鐘的時間,我不知道...... – Thomas 2010-01-27 13:03:58

回答

33

因爲正常的人比較多用於計算度數 - OpenGL旨在用於簡單。請注意,所有對度進行操作的函數都是「高級」函數。

對於OpenGL本身,它是否接收弧度或度數沒有區別 - 它們在內部轉換爲轉換矩陣,所以沒有使用其中一個或另一個的計算收益。

那麼,爲什麼如果你可以允許他們使用度,讓人們變得複雜呢?任何在OpenGL中認真編碼的人都會提供他們自己的從四元數計算出來的矩陣。

本着同樣的精神,我們可以問,爲什麼要有glRotatefgluPerspective,因爲矩陣在各方面都更加優雅,並且允許更高的控制等級。

逐點:

  • 雍容華貴 - 矩陣是在各方面
  • C庫更優雅 - C庫使用他們,因爲計算的原因,拍攝角度GL功能都註定不會被用於計算繁重的任務(直接使用矩陣),並且可能實現有一個度數查找表。
  • 任何其他庫 - 出於與Clib相同的原因在C庫之後 - 也是不真實的 - 許多C++庫允許進行選擇,有些則使用後者。計算的便利性 - 無所謂 - 內部表示法是矩陣,如果意味着要高效計算probablye使用查找表完成的 - 有對角沒有直接的操作,所以表示沒關係

還要注意:所有的使用度的功能在目前的標準(3.2)已棄用。 glRotatef只有功能取得程度,或者事實上,一個角度。glu是一種不適合重型部署的實用程序庫,因此它專爲可讀性量身定製,並且gluPerspective(... 60.0f..)在提供FOV方面的可讀性和「標準」要比gluPerspective(... M_PI/3.0f ...)多得多。

最後說明:

+13

你打電話給OpenGL程序員「正常人」嗎?使用* degrees *會讓東西變得複雜,就像我所說的 - 你必須在每個角落將它們轉換爲弧度('atan2'輸出,僅舉一個例子)。 – Thomas 2010-01-27 13:00:45

+6

可能是OGL開發人員的另一個'程度',我們永遠不會知道 – 2010-01-27 13:03:44

+1

@Thomas:如果你使用atan2輸出,不會使用四元數和自己構造旋轉矩陣是可恥的;) – 2010-01-27 13:04:28

13

我想說的是,由於OpenGL的設計與最終用戶記住,使用度,因爲一個可以指定重要的角度(90180270 ...)與僅整數,所以不需要浮點數GL_PI不變。

+4

+1:也非常好點:) – 2010-01-27 13:02:32

+1

對!例如,如果您正在製作2-d柵格樣式的圖形,並且想要將屏幕的方向改變90度,則實現可能需要確保沒有浮點錯誤的乾淨的轉換矩陣... 90度的表示在浮點上是明確的。 – 2010-02-26 03:41:30

+2

-1。我很確定他們在內部轉換爲弧度以用於任何三角測量:)。 – Kos 2010-11-11 21:14:46

3

代碼更容易閱讀,它簡化了新手的學習曲線並允許快速黑客入侵。

正如已經指出的那樣 - 度有很多優點 - 人類更適合度,比較:0.78539816339744830961566084581988 ...以45度爲例:/。

對於OpenGL的高級應用,無論如何都要提供自己的矩陣。

+0

「人類更適應學位」我不同意 – user3728501 2013-07-20 13:12:40

+3

人類更習慣於學位。人們談論轉90度或「做180」,或者360度,720度,900度或1080度旋轉。 XBox 360,1080單板滑雪,PhotoShop操作是以90度遞增旋轉等。沒有人說「他做了PI」,或者旋轉那張圖片PI/2弧度或1.57弧度,因爲弧度是分數/無理數,而度數通常是代表一些圈子的整數。大多數FOV操作和旋轉以度爲單位完成,每個象限以90度爲增量進行思考。 – Triynko 2014-01-06 19:25:13

+2

45度是PI/4弧度,而不是0.78539816339744830961566084581988。 – robinjam 2014-03-25 17:57:41

1

那麼,在大多數情況下會發生什麼情況是,您使用數學庫將弧度轉換爲度數並轉換回弧度。我同意以前令人敬畏的海報所說的大部分內容。

它更具人性化可讀性。

5

我認爲這是因爲你應該能夠得到一個確切的旋轉矩陣,如90或180度的某些角度。像其他人在這裏指定的那樣,如果使用pi/2而不是90度,舍入誤差可能會導致差不多執行90度旋轉的變換矩陣。