【问题标题】:How to use gloss accelerate to render mandelbrot如何使用光泽加速渲染 mandelbrot
【发布时间】:2021-09-14 08:28:28
【问题描述】:

作为一个练习,我正在尝试使用 Haskell 渲染 Mandelbrot 集。我正在使用光泽度来显示结果。到目前为止,我的数学是正确的,并且显示作品。目前,我生成了一个 [[Word8]],它表示每个像素运行到无穷大所需的迭代,并将其转换为 ByteString,我用它来构建光泽图片,并显示出来。它工作得很好,花花公子,分辨率高达100像素的宽度和高度,它运行得相当快,但它需要很长时间。因此,为了改变这一点,我现在尝试使用加速来使用 GPU 进行渲染,但我只是不知道该怎么做。它从使用什么库开始。平原加速?光泽加速?光泽光栅加速?我想,我必须使用最后一个。在模块 Graphics.Gloss.Accelerate.Raster.Array 中有一个函数 makePicture 存在,我想我必须使用它,但我无法理解所有参数,并且我没有找到很多文档。

有人可以向我解释一下 makePicture 功能,或者至少给我指出一个更解释的地方。一个可行的例子,我可以根据我的情况进行调整。

【问题讨论】:

    标签: haskell gloss accelerate-haskell


    【解决方案1】:

    您可以查看来自 Accelerate 的 github example directory 中的 mandelbrot 示例。那个使用加速和加速光泽包。要了解如何在 Accelerate 中对 Mandelbrot 进行编程,请参阅tutorial

    关于makePicturefunction的问题更具体。

    它有 5 个参数

    1. 第一个表示 Accelerate 应该如何Render 给定的世界。使用 GPU 时,应使用 accelerate-llvm-ptx 包中的 run1
    2. 整数像素宽度。
    3. 整数像素高度。
    4. 用于创建类型为Arrays world => (Acc world -> Acc (Array DIM2 Colour)) 的图像的功能。因此,给定一个带有一些参数的函数,其中参数应该是 Accelerate Arrays。在您的情况下可能是一个标量元组,因此您可以指示要显示的图像的范围。结果数组是一个矩阵,需要为Colour 类型(4 个浮点数的元组)。我的猜测是生成的数组的维度应该与您作为参数提供的像素宽度和像素高度相对应。
    5. 未提升的world(即前面没有Acc)。赋予第四个参数的函数的参数。

    之后,它应该会产生一个 Gloss Picture

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2013-07-07
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2014-01-17
      相关资源
      最近更新 更多