2010-01-27 6 views
67

OpenGL 디자이너는 결코 수학을 두려워하지 않으며 선형 대수학에 대한 지식은 가장 단순한 OpenGL 응용 프로그램을 제외하고는 모두에게 필수적입니다. 저는 OpenGL 프로그래머가 라디안 단위의 각도에 익숙하다고 생각할 수 있다고 생각합니다.왜 OpenGL은 라디안 대신도를 사용합니까?

수학적으로 라디안은 모든 점에서 각도보다 우아합니다. 그들은 또한 실질적인 장점이 있습니다 :

  • C 표준 라이브러리는 라디안을 사용합니다.
  • 꽤 많은 다른 라이브러리도 라디안을 사용합니다.
  • 라디안은 일부 계산에서 더 편리합니다. 원호의 길이

OpenGL 디자이너가 학위를 사용하기 위해 glRotatefgluPerspective과 같은 기능을 지정하기로 결정한 이유는 무엇입니까?

(나는 그것을 더 실제적인 중요성을 알고, 그리고 어쨌든 변경 않을거야. 난, 그냥 궁금 해요 내가 OpenGL.org에 대한 답을 찾을 수 없습니다.)

+0

OpenGL을 사용 해보지는 않았지만, 라디안 대신 도수가 필요한 이유는 무엇입니까? 분명히 라디안은 당신이 말했듯이 모든면에서 더 우아합니다. – sabiland

+4

닫기로 결정한 사람에게 : 이것은 진정한 질문이며, 확실하고 결정적인 대답이 있어야합니다. 어쩌면 SGI에서의 몇 회의 회의에서 나는 모른다. – Thomas

답변

33

일반 사람들이 더 있기 때문에 학위를 계산하는 데 익숙합니다 - OpenGL은 단순하게 사용해야합니다. 각도에서 작동하는 모든 기능은 "고수준"기능입니다.

OpenGL 자체의 경우 라디안 또는도를 수신하는지 여부는 아무런 차이가 없습니다. 내부적으로 변환 행렬로 변환되므로 둘 중 하나만 사용하면 계산상의 이점이 없습니다.

그렇다면 왜 사람들이 학위를 사용하도록 허락 할 수 있습니까? OpenGL에서 심각하게 코딩하는 사람이라면 어쨌든 쿼터니언 (quaternions)에서 계산 된 자체 행렬을 제공 할 것입니다.

행렬이 모든면에서보다 우아하고 더 높은 등급의 제어를 허용하므로 어쨌든 glRotatefgluPerspective이있는 이유는 무엇입니까? 점

포인트 :

  • 정밀함 - C 라이브러리 때문에 계산 이유를 사용하여 각도를 복용 GL 기능이 계산에 사용되는 것은 아니다 - 행렬
  • C 라이브러리 는
  • 모든면에서 더 우아한 무거운 작업 (매트릭스를 직접 사용), 아마도 구현에는도에 대한 조회 테이블이있을 것입니다.
  • 다른 라이브러리 - Clib과 동일한 이유로 C 라이브러리를 따르십시오. - 또한 많은 C++ 라이브러리가 선택을 허용하지만 일부는 후자를 사용합니다.
  • 계산의 편리 성 - 상관 없습니다 - 내부 표현은 다음과 같습니다. 도를 사용하여 모든 기능이 현재 표준에 있습니다 각도에 직접적인 조작이 없다, 그래서 표현은 또한주의

를 중요하지 않습니다 - 효율적으로 의미하는 경우 행렬이 계산은 룩업 테이블을 사용하여 수행 probablye (3.2) 더 이상 사용되지 않습니다. glRotatef의 기능 만 수행하거나 실제로는 각도를 취합니다.glu은 중용량 배포 용으로 설계되지 않은 유틸리티 라이브러리이므로 가독성에 맞게 조정되었으며 gluPerspective(... 60.0f..)gluPerspective(... M_PI/3.0f ...)보다 FOV를 제공하는 데 훨씬 더 읽기 쉽고 "표준"입니다.

최종 노트 :

+13

OpenGL 프로그래머를 "보통 사람들"이라고 부르는가? * degrees *를 사용하는 것은 내가 말했던 것처럼 복잡하게 만드는 것입니다. 모든 구석에서 라디안으로 변환해야합니다 ('atan2'출력, 단 하나의 예를 든다). – Thomas

+6

우리가 결코 알지 못하는 OGL 개발자들의 생각의 또 다른 '정도'가 될 수도 있습니다 –

+1

@ 토마스 : atan2 출력을 사용하면 쿼터니언을 사용하지 않고 자신을 회전 행렬로 구성하지 않는 것이 부끄러운 것입니다.) –

13
하나의 정수와 중요한 각도 ( 90, 180, 270을 ...)를 지정할 수 있기 때문에 내가 OpenGL을 염두에두고 최종 사용자와 설계 되었기 때문에,도 사용되었다고 말하고 싶지만

만 , 따라서 부동 소수점 GL_PI이 필요하지 않습니다.

+4

+1 : 또한 매우 좋은 점 : –

+1

맞아! 예를 들어 2 차원 래스터 스타일의 그래픽을 사용하고 화면의 방향을 90 도로 변경하려는 경우 구현시 부동 소수점 오류가없는 깨끗한 변환 행렬이 필요합니다. 90도 표현 부동 소수점은 모호하지 않습니다. –

+2

-1. 나는 그들이 내부적으로 라디안으로 변환되어 모든 삼각법에서 사용할 수 있다고 확신합니다. :) – Kos

3

코드는 읽기 쉽고 초보자를위한 학습 곡선을 쉽게 해주고 빠른 해킹을 허용합니다.

이미 언급했듯이 인간은도에 익숙합니다 : 0.78539816339744830961566084581988 ... 45도 (예 : /).

OpenGL의 고급 사용을 위해 어쨌든 자신 만의 매트릭스를 제공합니다.

+0

"인간이도에 익숙해 져 있습니다"나는 동의하지 않습니다. – user3728501

+3

인간은도에 익숙합니다. 사람들은 90도 회전, 180도 회전, 360도, 720도, 900도 또는 1080 회전을합니다. XBox 360, 1080 Snowboarding, PhotoShop 작업은 90도 단위로 회전합니다. 라디안은 분수/비합리적 수치이기 때문에 아무도 "그는 PI를했습니다"라고 말하거나 PI/2 라디안 또는 1.57 라디안을 회전시키지 않습니다. 종종 원의 일부분을 나타내는 정수입니다. 대부분의 FOV 작업과 회전은 각도로 이루어지며 각 사분면마다 90도 씩 증가합니다. – Triynko

+2

45 도는 PI/4 라디안이며, 0.78539816339744830961566084581988이 아닙니다. – robinjam

1

글쎄, 대부분의 경우 수학 라이브러리를 사용하여 라디안에서 각도로 변환 한 다음 다시 라디안으로 변환합니다. 이전의 멋진 포스터에서 말한 내용의 대부분에 동의합니다.

사람이 읽을 수 있습니다.

5

저는 90도 또는 180도 같은 특정 각도에 대해 정확한 회전 행렬을 얻을 수 있어야한다고 생각합니다. 여기 다른 사람들과 마찬가지로, 90도 대신에 π/2를 사용하면 반올림 오류로 인해 거의이 90도 회전하는 변환 행렬로 이어질 수 있습니다.

관련 문제