Python Tkinter perlin噪声动画非常慢

时间:2016-12-18 17:22:56

标签: python-2.7 tkinter

我正在尝试使用Tkinter un Python 2.7在第三维中为2D perlin噪声设置动画。 一切正常,但性能非常低(约2 fps)。

我认为问题出在“动画”功能中,每次更新噪音时我都会创建一个新图像。 如何实现良好的帧速率?在此代码中,图像为640x480px,但我需要它至少为1080x720px。 我愿意接受各种建议(甚至更改GUI库)。

from Tkinter import *
from noise import snoise3, pnoise3
from PIL import Image, ImageTk
import threading

class Noise:
    def __init__(self):
        self.root = Tk()
        self.w = 640
        self.h = 480
        self.canvas = Canvas(self.root, width = self.w, height = self.h)
        self.canvas.pack()
        self.img = Image.new("1",(self.w,self.h))
        self.pix = self.img.load()
        self.z = 0
        octv = 8
        freq = 16.0 * octv;
        for y in xrange(self.h):
            for x in xrange(self.w):
                self.pix[x,y] = int(snoise3(x/freq,y/freq,self.z,octaves = octv)*127.0+128.0)

        self.image = ImageTk.PhotoImage(self.img)
        self.canvas.create_image(self.w/2,self.h/2,image=self.image)
        self.canvas.pack()
        self.root.after(0, self.tr)
        self.root.mainloop()

    def tr(self):
        self.t1 = threading.Thread(target=self.animate)
        self.t1.daemon = True
        self.t1.start()

    def animate(self):
        octv = 8
        freq = 16.0 * octv;
        while True:
            self.z += 0.01
            for y in xrange(self.h):
                for x in xrange(self.w):
                    self.pix[x,y] = int(snoise3(x/freq,y/freq,self.z,octaves = octv)*127.0+128.0)

            self.image = ImageTk.PhotoImage(self.img)
            self.canvas.create_image(self.w/2,self.h/2,image=self.image)
            self.canvas.pack()

Noise()

谢谢大家^^

0 个答案:

没有答案