gpt4 book ai didi

python - 使用draw()而不是eventloop时的pyglet

转载 作者:行者123 更新时间:2023-12-01 00:48:38 26 4
gpt4 key购买 nike

我正在尝试用 pyglet 画一个圆。但当我使用 draw() 函数而不是 app.run() 循环时,它是不可见的。有什么建议我可以做什么吗?谢谢

from math import *
from pyglet.gl import *

window = pyglet.window.Window()

def makeCircle(x_pos, y_pos, radius, numPoints):
verts = []
glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
glColor3f(1,1,0)
for i in range(numPoints):
angle = radians(float(i)/numPoints * 360.0)
x = radius *cos(angle) + x_pos
y = radius *sin(angle) + y_pos
verts += [x,y]
circle = pyglet.graphics.vertex_list(numPoints, ('v2f', verts))
circle.draw(GL_LINE_LOOP)
input()

makeCircle(5,5, 100, 10)

最佳答案

您必须调用window.flip()更新窗口。

由于您没有设置投影矩阵,因此必须在标准化设备坐标中绘制几何图形,所有 3 个分量 (x, y, z) 的范围都在 [-1, 1] 范围内。请注意,当通过 pyglet.app.run() 启动应用程序时,pyglet 默认设置投影矩阵。

调用window.flip()并更改几何形状:

from math import *
from pyglet.gl import *

window = pyglet.window.Window()

def makeCircle(x_pos, y_pos, radius, numPoints):
verts = []
glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
glColor3f(1,1,0)
for i in range(numPoints):
angle = radians(float(i)/numPoints * 360.0)
x = radius *cos(angle) + x_pos
y = radius *sin(angle) + y_pos
verts += [x,y]
circle = pyglet.graphics.vertex_list(numPoints, ('v2f', verts))
circle.draw(GL_LINE_LOOP)

window.flip() # <--------

input()

makeCircle(0, 0, 0.5, 10) # <--------
<小时/>

或者,您可以自己设置正交投影,通过 glOrtho 。例如:

from math import *
from pyglet.gl import *

window = pyglet.window.Window()

def makeCircle(x_pos, y_pos, radius, numPoints):
verts = []

glMatrixMode(GL_PROJECTION)
glOrtho(0, 640, 0, 480, -1, 1)
glMatrixMode(GL_MODELVIEW)

glClear(pyglet.gl.GL_COLOR_BUFFER_BIT)
glColor3f(1,1,0)
for i in range(numPoints):
angle = radians(float(i)/numPoints * 360.0)
x = radius *cos(angle) + x_pos
y = radius *sin(angle) + y_pos
verts += [x,y]
circle = pyglet.graphics.vertex_list(numPoints, ('v2f', verts))
circle.draw(GL_LINE_LOOP)

text = 'This is a test but it is not visible'
label = pyglet.text.Label(text, font_size=36,
x=10, y=10, anchor_x='left', anchor_y='bottom',
color=(255, 123, 255, 255))
label.draw()

window.flip()
input()

makeCircle(5,5, 100, 10)

关于python - 使用draw()而不是eventloop时的pyglet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56748580/

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