前言
在《玩转 ArrayFire:08 数组和矩阵操作》中,我们已经了解到 ArrayFire 的统一后端,在这一篇中,我们继续学习 ArrayFire 在 Forge 下的可视化操作。
一、介绍
ArrayFire 作为一个库,旨在为高性能、并行和 GPU 计算提供一个健壮且易于使用的平台。 Forge ——一个 OpenGL 可视化库——的目标也是提供同样健壮的可视化,并且能使 Arrayfire 数据结构和 OpenGL 互操作。
Arrayfire 提供了包装函数,它被设计成一个简单的接口来可视化 af::array。这些函数执行各种互操作任务。其中一个特别的例子是,我们可以直接从 GPU-data 到 GPU-framebuffer 中提取数据绘图,而不是浪费时间从 GPU 复制和重新格式化数据到主机再返回给 GPU !这节省了 2 份内存拷贝。
可视化可以用鼠标操作。可以采取以下措施:
- 缩放(Alt +鼠标左键点击,上下移动)
- 平移(左键点击并拖动)
- 旋转(鼠标右键-跟踪球旋转)
现在,让我们来看看:我们可以用 Forge 展示什么样的视觉效果,以及 Arrayfire 是如何在两个库之间处理数据的。
二、窗口设置
在调用 Forge 函数之前,我们需要建立相关的 “canvas” 类。Forge 函数被添加到 af::Window 类。首先让我们创建一个窗口:
const static int width = 512, height = 512;
af::Window window(width, height, "2D plot example title");
do{
//drawing functions here
} while( !window.close() );
ArrayFire 还添加了一个绘图循环,所以可以使用 Forge 的绘图函数来绘制窗口。
三、绘图函数
下面,介绍几种常见的绘图函数:
1. Image
af::Window::image() 函数的作用是绘制灰度或彩色图像。要绘制灰度图像,应该将 2D 数组传递到函数中。让我们看一个静态噪声的例子:
array img = constant(0, width, height); //make a black image
array random = randu(width, height); //make random [0,1] distribution
img(random > 0.5) = 1