gpt4 book ai didi

python - Pyglet 未绘制预定函数

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:36 25 4
gpt4 key购买 nike

好吧,所以我对 pyglet 和 OpenGL 来说都是个新手,我想知道为什么这不起作用:

def DrawCircle(cx, cy, r, segments):

theta = 2*3.1415926/segments
c = math.cos(theta)
s = math.sin(theta)

x = r
y = 0

pyglet.gl.glBegin(pyglet.gl.GL_POLYGON)
pyglet.gl.glColor3f(0.05,0.2,0.9)
for counter in range(segments):
pyglet.gl.glVertex2f(x+cx, y+cy)
t = x
x = c * x - s * y
y = s * t + c * y
pyglet.gl.glEnd()

if __name__ == '__main__':
window = pyglet.window.Window(960,1010)
window.set_location(959,20)

@window.event
def on_draw():
window.clear()

def update(dt):
print(dt)
DrawCircle(500,500,20,30)

pyglet.clock.schedule_once(update,0.6)
pyglet.app.run()

简单地说,如果我从 on_draw 调用 DrawCircle,它会完全按照需要创建一个圆。如果我安排它,就不会绘制任何东西。调度程序本身正在工作,因为 dt 打印到控制台。我猜测 on_draw 正在设置上下文或允许其绘制的内容,而当我安排它时,上下文或缓冲区可能是错误的。任何帮助将不胜感激。

最佳答案

这是正确的代码:

import pyglet
import math

window = pyglet.window.Window(960,1010)
window.set_location( 50,50)

def DrawCircle(cx, cy, r, segments):

theta = 2*3.1415926/segments
c = math.cos(theta)
s = math.sin(theta)

x = r
y = 0

pyglet.gl.glColor3f(0.05,0.2,0.9)
pyglet.gl.glBegin(pyglet.gl.GL_POLYGON)

for counter in range(segments):
pyglet.gl.glVertex2f(x+cx, y+cy)
t = x
x = c * x - s * y
y = s * t + c * y

pyglet.gl.glEnd()

@window.event
def on_draw():
window.clear()
DrawCircle(500,500,20,30)


if __name__ == '__main__':
pyglet.app.run()

使用 Pyglet,所有绘图通常都是在 on_draw 方法中完成。由于每次重绘时都会清除窗口,因此每次都必须绘制形状。

更新功能不一定与显示相关

调度一次或定期调度一般用于定期修改各种参数(即:对于动画来说:x,y += dx,dy *dt)。

参见:http://pyglet.org/doc/api/pyglet.clock-module.html

关于python - Pyglet 未绘制预定函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com