1

在阅读了这篇关于将地图的方形切片转换为 2D 圆圈以模拟旋转的地球的博客文章后,我想我应该试一试。作者声称在 pygame 中制作了他的程序的一个版本,其中他单独为每个像素着色。

http://www.petercollingridge.co.uk/blog/spinning-globe

我试了一下,生成一张半径为 100 像素的圆的图像大约需要十分钟,更不用说模拟旋转地球所需的图像数量了。我这样做的方式显然是垃圾,因为我在尝试生成梯度噪声图像和扫描网络摄像头输入时遇到了这个问题,但我不知道如何在不编写程序的情况下“单独为每个像素着色”遍历每个像素,检查条件并分配数值。遍历每个像素显然会消耗资源,即使它是 surfarray 而不是 Surface。

我的函数看起来像这样,采用形成圆形的 alpha 数组,然后是我想在圆形中显示的地图切片部分的 surfarray。

def draw_globe(alpha_array, world_slice):
    rgb_array = alpha_array 
    for x in range(len(alpha_array)):
        print x
        for y in range(len(alpha_array[x])):
            if alpha_array[x][y] == 0:
                rgb_array[x,y] = BLACK
            else:
                for point in range(len(world_slice[:, y])):
                    if world_slice[point][ y] == MAP_BLUE:
                        colour = TRUE_BLUE
                    else:
                        colour = TRUE_GREEN
                    rgb_array[get_x_coord(y, point, 100), y] = colour
    return pygame.surfarray.make_surface(rgb_array)

我只是在黑暗中尝试了一下,但我不知道如何让它更快。真的有可能制作这个程序的工作 pygame 版本,像作者声称的那样单独为每个像素着色,还是有一种更智能、更快的方法来通过将地图图像本身转换或扭曲成一个圆圈来做到这一点?

4

0 回答 0