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

StackOverflow https://stackoverflow.com/questions/2146884

  •  23-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

По пунктам:

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

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

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

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top