Почему OpenGL использует градусы вместо радианов?

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

Заключительные примечания:

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Ответ 5

Хорошо, что в большинстве случаев случается, что вы используете математическую библиотеку для преобразования из радианов в градусы и обратно в радианы. Я согласен с большей частью того, что было сказано предыдущими удивительными плакатами.

Это более человечно читаемый.