Есть довольно много проектов, которые остановились на Generic Graphics Toolkit для этого. GMTL там хорош - он довольно маленький, очень функциональный и используется достаточно широко, чтобы быть очень надежным. OpenSG, VRJuggler и другие проекты все переключились на использование этого вместо их собственной математики, созданной вручную.
Я нахожу это довольно хорошим - он делает все через шаблоны, поэтому он очень гибкий и очень быстрый.
Редактировать:
После обсуждения и редактирования комментариев, я подумал, что я добавлю больше информации о преимуществах и недостатках для конкретных реализаций, и почему вы можете выбрать один из них, учитывая вашу ситуацию.
GMTL -
Преимущества: Простой API, специально разработанный для графических движков. Включает в себя множество примитивных типов, предназначенных для рендеринга (таких как плоскости, AABB, кватрионы с множественной интерполяцией и т. Д.), Которых нет ни в каких других пакетах. Очень низкий объем памяти, довольно быстрый, простой в использовании.
Недостатки: API очень ориентирован на рендеринг и графику. Не включает матрицы общего назначения (NxM), разложение и решение матриц и т. Д., Поскольку они находятся за пределами традиционных графических / геометрических приложений.
Эйген -
Преимущества: чистый API , довольно простой в использовании. Включает модуль Geometry с кватернионами и геометрическими преобразованиями. Недостаточно памяти. Полное, высокопроизводительное решение больших матриц NxN и других математических процедур общего назначения.
Недостатки: может быть немного больше, чем вы хотите (?). Меньше геометрических / специфических процедур рендеринга по сравнению с GMTL (т.е. определения углов Эйлера и т. Д.).
IMSL -
Преимущества: Очень полная числовая библиотека. Очень, очень быстро (предположительно, самый быстрый решатель). Безусловно самый большой, самый полный математический API. Коммерчески поддерживается, зрелый и стабильный.
Недостатки: Стоимость - не недорого. Очень мало геометрических / рендеринг-специфических методов, так что вам нужно будет свернуть свои собственные поверх их классов линейной алгебры.
NT2 -
Преимущества: Обеспечивает синтаксис, который более знаком, если вы привыкли к MATLAB. Обеспечивает полное разложение и решение для больших матриц и т. Д.
Недостатки: математический, не сфокусированный. Вероятно, не так производительно, как Эйген.
LAPACK -
Преимущества: Очень стабильные, проверенные алгоритмы. Был вокруг в течение длительного времени. Полное решение матриц и т. Д. Множество вариантов неясной математики.
Недостатки: в некоторых случаях не так высокоэффективно. Портировано из Фортрана, с нечетным API для использования.
Лично для меня все сводится к одному вопросу - как вы планируете это использовать. Если вы сосредоточены только на рендеринге и графике, мне нравится Generic Graphics Toolkit , поскольку он хорошо работает и поддерживает множество полезных операций рендеринга из коробки без необходимости реализовывать свои собственные. Если вам нужно решение матриц общего назначения (то есть: разложение больших матриц по SVD или LU), я бы пошел с Eigen , поскольку он обрабатывает это, предоставляет некоторые геометрические операции и очень эффективен при больших матричных решениях. Возможно, вам придется написать больше ваших собственных графических / геометрических операций (поверх их матриц / векторов), но это не ужасно.