【问题标题】:Which linear algebra to use for OpenGL in Haskell?Haskell中的OpenGL使用哪个线性代数?
【发布时间】:2012-08-12 19:01:07
【问题描述】:

我正在尝试在 haskell 中进行一些 OpenGL 编程。但我对图书馆的现状感到困惑。 OpenGL 使用 Tensor 包,它只定义了几种向量类型(但没有以通用方式这样做)。它似乎没有提供任何 Matrix 实现。

还有其他几个用于线性代数的包:tensor(注意小写的 T)、Vechmatrix,它们似乎比 Tensor 更完整。

我要搜索的内容至少应该包含 3d 和 2d 图形中使用的常用函数,具有合理的性能并且应该与 OpenGL 兼容,但我想我必须为此更改库。

【问题讨论】:

  • 还有vect,内置了OpenGL integration
  • vect 看起来确实可用。但我认为它远非一个好的(通用)haskell 库。实际上,它看起来很像Java VecMath,其中为每种向量类型声明了每种算法。
  • 我认为你应该自己写。能够批评其他实现意味着你已经准备好了。有一次我也遇到过类似的情况,拖了很久,最后还是值得花时间。
  • @Ptharien'sFlame,来自 vect sources: instance Matrix Mat4 where ... inverse = error "inverse/Mat4: not implemented yet"。这不是很有用...

标签: opengl haskell linear-algebra


【解决方案1】:

迟到的答案,对不起。 HMatrix 是此类事情的标准选择。它非常兼容,有一个很好的 API,实际上用于计算机视觉以及其他应用程序:http://dis.um.es/profesores/alberto/research.html

【讨论】:

  • 不幸的是,hmatrix 仅适用于 Storable 的向量/矩阵,别名“具有 C 表示”。如果您想在其中使用其他或您自己的数据类型,您必须自己编写一个Storable 实例,这涉及低级指针编程(或使用generic-storable)。其他包没有这个限制,并且可能适用于例如带有Num 实例的所有内容。但是,如果您只需要标准数字,hmatrix 可能是更好的选择(并且在 C 中实现的操作可能更快)替代方案。
  • hmatrix 似乎也受 GPL 许可的约束——这可能会造成问题。
【解决方案2】:

我最近也有同样的疑惑,特别恼火的是 Tensor 没有为你提供点积、叉积、归一化等方便的函数。

正如您所指出的,vect 对于FloatDouble 是“硬编码”的,因此不能有像FunctorMonoidApplicative 这样有用的类型类实例——有了这些我们会得到一个许多“免费”操作,例如补充:(+) <$> v1 <*> v2.

#haskell,我被指向linear 包。它维护良好,并带有许多有用的实例和函数。

【讨论】:

    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多