Какую линейную алгебру использовать для OpenGL в Haskell?
Я пытаюсь сделать некоторое программирование OpenGL в haskell. Но меня смущает текущее состояние библиотек. OpenGL использует пакет Tensor, который определяет только несколько типов векторов (но не делает этого в общем виде). Кажется, он не предоставляет реализаций Matrix.
Существует несколько других пакетов для линейной алгебры: Tensor (обратите внимание на нижний регистр T), Vec, hmatrix, которые выглядят более полными, чем Tensor.
То, что я ищу, должно, по крайней мере, содержать общие функции, используемые в 3D и 2D графике, иметь разумную производительность и должно быть совместимо с OpenGL, но я думаю, что я "Мне нужно изменить библиотеку для этого.
Ответы
Ответ 1
Поздний ответ, извините. HMatrix является стандартным выбором для таких вещей. Он очень совместим, имеет хороший API и фактически используется для компьютерного видения среди других приложений: http://dis.um.es/profesores/alberto/research.html
Ответ 2
Мне было интересно то же самое в последнее время, и особенно раздражало то, что Tensor не предоставляет вам удобные функции для точечного продукта, кросс-продукта, нормализации и т.д.
Как вы указали, vect
является "жестко запрограммированным" для Float
и Double
, и поэтому они не могут иметь полезные экземпляры typeclass, такие как Functor
, Monoid
или Applicative
- с теми, которые мы получили бы много операций "бесплатно", например дополнение: (+) <$> v1 <*> v2
.
В #haskell
я указал на пакет linear. Он хорошо поддерживается и поставляется с множеством полезных экземпляров и функций.