我正在尝试使用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()
谢谢大家^^