在阅读这篇关于将地图的正方形切片转换为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版本单独着色每个像素,如作者声称的那样,还是通过将地图图像本身转换或扭曲成圆形来实现它的更智能,更快捷的方法?