无法获取Pyglet进行渲染

时间:2019-07-02 19:50:21

标签: python pyglet

我正在尝试构建一个小的API,以简化使用pyglet时的某些事情。我希望它与Processing语法相似,以便可以在纯python环境中使用我的Python Processing代码,而不是对其进行处理。

我已经获得一些代码来绘制矩形,但是仅当我复制/粘贴时才起作用。我目前正在使用的模型似乎没有任何作用。

以下是我正在使用的App类的重要部分:

import pyglet
class App(pyglet.window.Window):
    def __init__(self, w=1280, h=720, fullscreen = False, resizable = True):
        super(App, self).__init__(w, h, fullscreen = fullscreen, resizable=resizable)
        self.size = self.width, self.height = w, h
        self.alive = 1
    def on_draw(self):
        self.render()
    def setBinds(self, drawFunction):
        self.drawFunction = drawFunction
    def render(self):
        self.clear()
        self.drawFunction()
        self.flip()
    def run(self):
        while self.alive == 1:
            self.render()
            event = self.dispatch_events()
    def Rect(self, x, y, w, h):
        pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x, y, w, y, w, h, x, h]))

这是运行应用程序的代码。它应该打开一个窗口,然后每帧在屏幕上绘制一个矩形。

from processing import App
def draw(dt=0):
    width, height = APP.width, APP.height
    APP.Rect(100,100,100,100)

if __name__ == "__main__":
    APP = App()
    APP.setBinds(drawFunction=draw)
    APP.run()

但是,它不会在屏幕上绘制任何内容。没有错误显示或任何东西,只有黑屏。 使用简化的代码(例如:

)时,我已经有了pyglet.grapics.draw函数可以在屏幕上绘制内容。

import pyglet
from pyglet.window import mouse

window = pyglet.window.Window()

@window.event
def on_draw():
    window.clear()
    x, y, dx, dy = 100, 100, 20, 30
    pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x, y, dx, y, dx, dy, x, dy]))

pyglet.app.run()

我不确定这两套代码之间的区别是什么使它不起作用

1 个答案:

答案 0 :(得分:2)

使用以下参数调用方法Rect

APP.Rect(100,100,100,100)

然后说明

pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x, y, w, y, w, h, x, h]))

不绘制矩形,因为所有顶点坐标都相同。

要绘制矩形,您必须分别通过x+w y+h计算右顶点坐标和顶部顶点坐标:

x1, y1, x2, y2 = x, y, x+w, y+h 
pyglet.graphics.draw(4, pyglet.gl.GL_QUADS, ('v2f', [x1, y1, x2, y1, x2, y2, x1, y2]))