Почему OpenGL использует градусы вместо радианов? - PullRequest
68 голосов
/ 27 января 2010

Разработчики OpenGL никогда не боялись математики, и знание линейной алгебры необходимо для всех, кроме самых простых приложений OpenGL. Я думаю, можно смело предположить, что программисты OpenGL знакомы с углами в радианах.

Математически радианы во всех отношениях более элегантны, чем градусы. Они также имеют практические преимущества:

  • Стандартная библиотека C использует радианы.
  • Практически любая другая библиотека использует радианы.
  • Радианы более удобны в некоторых вычислениях, например длина дуги окружности.

Почему же тогда разработчики OpenGL решили указать такие функции, как glRotatef и gluPerspective для использования градусов?

(Я знаю, что это не имеет никакого практического значения, и оно все равно не изменится. Мне просто любопытно, и я не смог найти ответ на OpenGL.org.)

Ответы [ 5 ]

33 голосов
/ 27 января 2010

Поскольку нормальные люди более привыкли к вычислению степеней - OpenGL предназначен для простого использования. Обратите внимание, что все функции, работающие с градусами, являются функциями высокого уровня.

Для самого OpenGL нет разницы, получает ли он радианы или градусы - они все равно внутренне преобразуются в матрицы преобразования, так что нет никакой вычислительной выгоды от использования того или другого.

Так зачем все усложнять людям, если вы можете позволить им использовать степени? Любой, кто серьезно занимается кодированием в OpenGL, в любом случае предоставит свои собственные матрицы, вычисленные из кватернионов.

В том же духе мы могли бы спросить, почему в любом случае есть glRotatef и gluPerspective, поскольку матрицы более элегантны во всех отношениях и допускают более высокий уровень контроля.

Точка за точкой:

  • Элегантность - матрицы более элегантны в каждом аспекте
  • Библиотека C - библиотека C использует их по вычислительным причинам, функции GL, принимающие углы, не предназначены для сложных вычислительных задач (напрямую используют матрицы), и, вероятно, реализация в любом случае имеет таблицу поиска степеней.
  • любая другая библиотека - следующая за библиотекой C по тем же причинам, что и Clib - также, это не соответствует действительности - многие библиотеки C ++ допускают выбор, некоторые используют последнюю
  • Удобство вычислений - не имеет значения - внутреннее представление - это матрицы, вычисления, вероятно, выполняются с использованием справочных таблиц, если они должны быть эффективными - нет прямой операции с углами, поэтому представление не имеет значения

Также обратите внимание : все функции, использующие градусы, в текущем стандарте (3.2) устарели. glRotatef - это функция only , принимающая градусы или, вообще говоря, угол. glu - это служебная библиотека, не предназначенная для развертывания в тяжелых условиях, поэтому она ориентирована на удобочитаемость, а gluPerspective(... 60.0f..) гораздо более читабелен и "стандартен" с точки зрения предоставления FOV, чем gluPerspective( ... M_PI / 3.0f ... ).

Заключительные ноты:

13 голосов
/ 27 января 2010

Я бы сказал, что поскольку OpenGL был разработан с учетом требований конечного пользователя, были использованы градусы, поскольку можно указывать важные углы (90, 180, 270 ...) только с целыми числами и поэтому нет необходимости в константе с плавающей запятой GL_PI.

5 голосов
/ 24 февраля 2011

Я думаю, это потому, что вы должны быть в состоянии получить точную матрицу вращения для определенных углов, например, 90 или 180 градусов. Как указали другие люди, если вы используете пи / 2 вместо 90 градусов, ошибки округления могут привести к матрице преобразования, которая почти выполняет поворот на 90 градусов.

3 голосов
/ 27 января 2010

Код легче читать, он облегчает процесс обучения новичков и позволяет быстро взломать.

Как уже говорилось - у градусов есть преимущество - люди лучше привыкли к градусам, сравните: 0,78539816339744830961566084581988 ... с 45 градусами, например: /.

Для расширенного использования OpenGL вы в любом случае предоставляете свои собственные матрицы.

1 голос
/ 27 января 2010

Что происходит в большинстве случаев, так это то, что вы используете библиотеку Math для преобразования радиан в градусы и обратно в радианы. Я согласен с большинством из того, что было сказано предыдущими удивительными плакатами.

Это более читабельно для человека.

...