haskell - 如何使用光泽加速渲染 mandelbrot
问题描述
作为一个练习,我正在尝试使用 Haskell 渲染 Mandelbrot 集。我正在使用光泽度来显示结果。到目前为止,我的数学是正确的,并且显示作品。目前,我生成了一个 [[Word8]],它表示每个像素运行到无穷大所需的迭代,并将其转换为 ByteString,我用它来构建光泽图片,并显示出来。它工作得很好,花花公子,分辨率高达 100 像素的宽度和高度,它运行得相当快,但它需要很长时间。因此,为了改变这一点,我现在尝试使用加速来使用 GPU 进行渲染,但我只是不知道该怎么做。它从使用什么库开始。平原加速?光泽加速?光泽光栅加速?我想,我必须使用最后一个。在 Graphics.Gloss.Accelerate.Raster 模块中。
有人可以向我解释 makePicture 功能,或者至少将我指向某个更解释的地方。一个工作示例,我可以根据我的情况进行调整会很好。
解决方案
您可以从 Accelerate的github 示例目录中查看 mandelbrot 示例。那个使用加速和加速光泽包。要了解如何在 Accelerate 中对 Mandelbrot 进行编程,请参阅本教程。
并且更具体的关于makePicture
功能的问题。
它有 5 个参数
- 第一个表明
Render
给定的世界应该如何加速。使用 GPU 时,应从run1
包中使用accelerate-llvm-ptx
。 - 整数像素宽度。
- 以整数表示的像素高度。
- 创建类型为 的图像的函数
Arrays world => (Acc world -> Acc (Array DIM2 Colour))
。因此,给定一个带有一些参数的函数,其中参数应该是 AccelerateArrays
。在您的情况下可能是一个标量元组,因此您可以指示要显示的图像的范围。结果数组是一个需要类型的矩阵Colour
(4 个浮点数的元组)。我的猜测是生成的数组的尺寸应该与您作为参数提供的像素宽度和像素高度相对应。 - 未提升的
world
(即没有Acc
在它前面)。赋予第四个参数的函数的参数。
之后,它应该产生一个 Gloss Picture
。
推荐阅读
- python - PIL 打开 JPEG 缺少 Photoshop
- pandas - 在熊猫数据框中重塑并生成新的日期数据
- lte - 如何知道 USIM 卡 PIN 码状态(启用或禁用)
- c# - 如何使用 LINQ 进行双重分组
- matlab - 如何在 Matlab 中将单个二维曲线绘制到颜色图上?
- r - 使用 install.packages 安装软件包时 RStudio 崩溃
- r - 创建一个弹出窗口,显示一旦访问闪亮的应用程序,欢迎用户访问仪表板
- haskell - 如何将数字作为字符串添加到haskell中的字符串
- python - 如何使用 python 执行可恢复的文件上传到 Google Drive
- vb.net - 如果 notEOF 和 bof 已经放了,仍然报错