我的一个朋友不得不用c中的opengl绘制一个mandelbrot。我决定在Swift中这样做。
我尝试的第一种方法是创建一个带有ARGB数据的数组,并将其转换为CGImage并在UIImageView中查看该数据。然而,这还不够快。
现在我想知道,在屏幕上绘制单个像素的最快方法是什么。我看着Metal,但这似乎主要是关于三角形和3d的东西。然后我来到scenekit着色器(.fsh),并认为这可能是一个很好的解决方案。但是我想也能够放大mandelbrot分形,我找不到在我的mandelbrot中输入变量的方法(我的参考:https://www.weheartswift.com/fractals-xcode-6/)
你能告诉我/给出一个例子(Swift请)以最快的方式绘制单个像素,或者至少一种方法将原始像素绘制到屏幕上而不必使用像CGImage那样的中间件吗?
答案 0 :(得分:2)
不是使用顶点和片段着色器,而是使用内核函数(或计算着色器)。这将是一个单一着色器,用于处理数学并在纹理的每个像素处设置颜色值。然后,您可以使用CAMetalLayer将纹理渲染到屏幕。
看一下这篇博客文章,我使用传递给内核函数的粒子坐标写入纹理:http://flexmonkey.blogspot.co.uk/2015/03/swift-metal-four-million-particles-on.html
答案 1 :(得分:0)
如果你想在GPU上计算分形,那么这比Swift问题更像是一个OpenGL(或金属)问题。您需要采取更小的步骤:
请注意,第6步可能很难,您可能需要帮助,但在成功完成步骤1-5之前,即使启动它也没有意义。您应该能够找到许多教程来帮助您完成步骤1-5,但您可能需要将它们从C,C ++或Objective-C转换为Swift。
您链接的页面完全跳过步骤1-5,因为Xcode场景查看器会为您完成这些操作。如果您想编写独立应用程序,则需要了解如何执行这些步骤。