Как использовать глянец для рендеринга Мандельброта

в качестве упражнения я пытаюсь визуализировать набор Мандельброта с помощью Haskell. Я использую глянец, чтобы отобразить результат. Пока что я правильно понял математику, и отображение работает. На данный момент я создаю [[Word8]], который представляет итерации, которые потребовались для каждого пикселя, чтобы работать до бесконечности, и конвертирую это в ByteString, который я использую для создания глянцевого изображения, которое я показываю. Он работает нормально и изящно, и до разрешения пары 100 пикселей по ширине и высоте он работает достаточно быстро, но тогда это занимает много времени. Итак, чтобы изменить это, я сейчас пытаюсь использовать ускорение для использования графического процессора для рендеринга, но я просто не знаю, что делать. Все начинается с того, какую библиотеку использовать. Обычное ускорение? глянец-ускоритель? глянец-растр-ускорить? Думаю, надо использовать последнюю. В модуле Graphics.Gloss.Accelerate.Raster.В массиве существует функция makePicture, которую, я думаю, я должен использовать, но я не могу понять все параметры и не нашел много документации.

Может ли кто-нибудь объяснить мне функцию makePicture или, по крайней мере, указать мне где-нибудь, где есть более подробные объяснения. Было бы неплохо получить рабочий пример, который я могу приспособить к своему случаю.

1 ответ

Вы можете взглянуть на пример Мандельброта из каталога примеров github от Accelerate. Этот использует пакет ускорения и ускорения-глянца. Чтобы дать представление о том, как можно запрограммировать Мандельброта в Accelerate, есть этот учебник .

И более конкретно по вопросу о makePicture функция .

Имеет 5 аргументов

  1. Первый указывает, как Accelerate должен Renderмир, который был дан. При использовании графического процессора следует использовать run1 от accelerate-llvm-ptx упаковка.
  2. Ширина пикселя в целых числах.
  3. Высота пикселя в целых числах.
  4. Функция для создания изображения с типом Arrays world => (Acc world -> Acc (Array DIM2 Colour)). Таким образом, задана функция с некоторыми параметрами, где параметры должны быть ускорены. Arrays. Вероятно, в вашем случае это кортеж скаляров, поэтому вы можете указать диапазон изображения, которое хотите отобразить. Результирующий массив - это матрица, которая должна иметь типColour(Кортеж из 4 поплавков). Я предполагаю, что размер результирующего массива должен соответствовать ширине и высоте пикселя, которые вы указали в качестве аргументов.
  5. Неподнятый world (т.е. без Accперед ней). Параметры, которые задаются функции четвертого аргумента.

После этого должен получиться блеск. Picture.

Другие вопросы по тегам