2012-08-12 29 views
10

Tôi đang cố gắng thực hiện một số chương trình OpenGL trong haskell. Nhưng tôi đang bối rối bởi tình trạng hiện tại của các thư viện. OpenGL sử dụng gói Tensor chỉ định nghĩa một số loại vectơ (nhưng không thực hiện theo cách tổng quát). Nó dường như không cung cấp bất kỳ triển khai Ma trận nào.Đại số tuyến tính nào để sử dụng cho OpenGL trong Haskell?

Có một số gói khác cho đại số tuyến tính: tensor (lưu ý chữ thường T), Vec, hmatrix có vẻ hoàn chỉnh hơn Tensor.

Điều tôi đang tìm kiếm ít nhất nên chứa các chức năng phổ biến được sử dụng trong đồ họa 3d và 2d, có hiệu suất hợp lý và phải tương thích với OpenGL nhưng tôi đoán tôi sẽ phải thay đổi thư viện.

+1

Ngoài ra còn có [vect] (http://hackage.haskell.org/package/vect), có tích hợp [OpenGL] (http://hackage.haskell.org/package/vect-opengl) được tích hợp sẵn . –

+1

** vect ** trông có thể sử dụng được. Nhưng tôi nghĩ rằng nó là xa là một thư viện haskell tốt đẹp (chung chung). Trên thực tế nó trông rất giống như [Java VecMath] (http://java.net/projects/vecmath/) trong đó mỗi thuật toán được khai báo cho mọi loại vectơ. – fho

+0

Tôi nghĩ bạn nên viết của riêng bạn. Việc có thể chỉ trích các triển khai khác có nghĩa là bạn đã sẵn sàng cho nó. Tôi đã ở trong một tình huống tương tự một lần và bị đóng băng trong một thời gian dài, nhưng cuối cùng đã đến lúc đáng để chi tiêu. – user1095108

Trả lời

2

Trả lời muộn, xin lỗi. HMatrix là sự lựa chọn tiêu chuẩn cho những thứ như thế này. Nó rất tương thích, có API tốt, và thực sự được sử dụng cho tầm nhìn máy tính trong số các ứng dụng khác: http://dis.um.es/profesores/alberto/research.html

+1

Thật không may, hmatrix chỉ hoạt động trên vectơ/ma trận của những thứ có 'Storable', bí danh" có một đại diện C ". Nếu bạn muốn sử dụng các kiểu dữ liệu khác hoặc của riêng bạn trong đó, bạn phải tự viết một cá thể 'Storable', liên quan đến lập trình con trỏ mức thấp (hoặc sử dụng [generic-storable] (http://hackage.haskell.org)/package/generic-storable)). Gói khác không có hạn chế này và có thể hoạt động trên ví dụ: mọi thứ với một cá thể 'Num'. Tuy nhiên, nếu bạn chỉ cần các số tiêu chuẩn, hmatrix có thể là lựa chọn tốt hơn (và có thể nhanh hơn với các hoạt động được thực hiện trong C). – nh2

+1

hmatrix dường như bị ràng buộc bởi giấy phép GPL - điều này có thể gây ra vấn đề. – sdasdadas

1

Tôi đã tự hỏi điều tương tự gần đây và Tensor không cung cấp cho bạn các chức năng thuận tiện cho sản phẩm chấm, chéo sản phẩm, bình thường, vv

như bạn chỉ ra, vect là "mã hóa cứng" cho FloatDouble, và therfore không thể có trường hợp typeclass hữu ích như Functor, Monoid hoặc Applicative - với những người chúng ta sẽ nhận được rất nhiều hoạt động "cho miễn phí ", vd Ngoài ra: (+) <$> v1 <*> v2.

Trên #haskell, tôi đã được trỏ đến gói linear. Nó được duy trì tốt và đi kèm với một loạt các trường hợp và chức năng hữu ích.

Các vấn đề liên quan