2012-08-12 20 views
10

Próbuję zrobić niektóre programowania OpenGL w haskell. Ale jestem zdezorientowany obecnym stanem bibliotek. OpenGL używa pakietu Tensor, który definiuje tylko kilka typów wektorów (ale nie robi tego w sposób ogólny). Wydaje się, że nie zapewnia żadnych implementacji Matrix.Jaką liniową algebrę można zastosować do OpenGL w Haskell?

Istnieje kilka innych pakietów dla algebry liniowej: tensor (zwróć uwagę na małą t), Vec, hmatrix, które wydają się być bardziej kompletny niż Tensor.

To, czego szukam, powinno przynajmniej zawierać typowe funkcje używane w grafice 3D i 2D, mieć rozsądną wydajność i powinno być kompatybilne z OpenGL, ale myślę, że będę musiał zmienić bibliotekę.

+1

Istnieje również [vect] (http://hackage.haskell.org/package/vect), który ma wbudowaną integrację [OpenGL] (http://hackage.haskell.org/package/vect-opengl) . –

+1

** vect ** nadaje się do użytku. Ale myślę, że daleko mu do bycia przyjemną (generyczną) biblioteką haskell. W rzeczywistości wygląda podobnie jak [Java VecMath] (http://java.net/projects/vecmath/), gdzie każdy algorytm jest zadeklarowany dla każdego typu wektora. – fho

+0

Myślę, że powinieneś napisać własną. Możliwość krytykowania innych implementacji oznacza, że ​​jesteś na to gotowy. Byłem w podobnej sytuacji jeden raz i długo się zatrzymywałem, ale w końcu nadszedł czas, który warto było wydać. – user1095108

Odpowiedz

2

Późna odpowiedź, przepraszam. HMatrix jest standardowym wyborem dla takich rzeczy. Jest bardzo kompatybilny, ma przyjemne API i jest rzeczywiście używany do wizji komputerowej wśród innych aplikacji: http://dis.um.es/profesores/alberto/research.html

+1

Niestety, hmatrix działa tylko na wektorach/macierzach rzeczy, które są "Przechowywane", alias "mają reprezentację C". Jeśli chcesz użyć innych lub własnych typów danych, musisz napisać osobiście instancję "Storable", która obejmuje niskopoziomowe programowanie wskaźnikowe (lub użycie [generic-stagu] (http://hackage.haskell.org/package/generic-storable)). Inne pakiety nie mają tego ograniczenia i mogą działać np. wszystko z instancją 'Num'. Jeśli jednak potrzebujesz tylko standardowych numerów, hmatrix może być lepszym (i prawdopodobnie szybszym w przypadku operacji wprowadzonych w C) jako alternatywa. – nh2

+1

hmatrix również wydaje się być związany licencją GPL - co może stanowić problem. – sdasdadas

1

Zastanawiam się nad tym samym ostatnio, a szczególnie byłam zirytowana tym, że Tensor nie zapewnia Ci wygodnych funkcji dla produktu kropkowego, krzyż produkt, normalizacja itp

jak podkreślił vect jest „na sztywno” do Float i Double i therfore nie może mieć użyteczne instancje typeclass jak Functor, Monoid lub Applicative - z tymi, chcielibyśmy uzyskać wiele operacji „dla za darmo ", np dodatek: (+) <$> v1 <*> v2.

Na #haskell, zostałem wskazany na pakiet linear. Jest dobrze utrzymany i zawiera mnóstwo użytecznych instancji i funkcji.