Pyglet on_draw不会绘制更新的函数

问题描述 投票:0回答:1

crtaj()函数(主绘图函数)采用两个全局矩阵“ T”和“ P”,使用这两个矩阵对全局顶点“ vrhovi”应用转换,并将转换后的顶点存储到“ novivrhovi”中,并且然后使用转换后的顶点“ novivrhovi”和全局“ poligoni”绘制多边形(描述顶点的连接)。当按下键“上”时,矩阵“ T”和“ P”被更新。我想要的是在这些更新中的每一个上进行绘制,但是在初始绘制之后,在按下第一个“向上”键后屏幕变为空白。我100%确信我的变换是可以的,因为向上按一次键会给出我尝试将其设置为initial的矩阵,并且可以正确绘制它,因此在使用默认的initial和向上按下时没有理由不正确绘制,因为结果是相同的,并且该功能甚至在每次我按“上”时都打印正确的顶点,但是什么都不显示。

@window.event
def on_draw():

    glScalef(150,150,150)
    glTranslatef(sum(xkord)/2,sum(ykord)/2,0)

    window.clear()
    crtaj()


@window.event
def on_key_press(key, modifiers):
    global vrhovi

    if (key == pyglet.window.key.UP):
        ociste[0][0]=ociste[0][0]+1
        transform()
        on_draw()

#main draw
def crtaj():


    glBegin(GL_LINE_LOOP)
    global T
    global P
    global vrhovi
    global poligoni

    #calculate new vertices of polygon-->novivrhovi

    novivrhovi = []

    for vrh in vrhovi:
        novivrh = vrh.copy()
        novivrh.append(1)
        novivrh = np.matrix(novivrh)
        novivrh = novivrh.dot(T)
        novivrh = novivrh.dot(P)
        novivrh = novivrh.tolist()
        novivrhovi.append(novivrh[0])
    print("N O V I V R H O V I")
    print(novivrhovi)

    #draw the poligon
    for poligon in poligoni:

        index0 = poligon[0]-1
        index1 = poligon[1]-1
        index2 = poligon[2]-1

        glVertex4f(novivrhovi[index0][0],novivrhovi[index0][1],novivrhovi[index0][2],novivrhovi[index0][3])
        glVertex4f(novivrhovi[index1][0],novivrhovi[index1][1],novivrhovi[index1][2],novivrhovi[index1][3])
        glVertex4f(novivrhovi[index2][0],novivrhovi[index2][1],novivrhovi[index2][2],novivrhovi[index2][3])
    glEnd()

pyglet.app.run()
python opengl pyglet opengl-compat
1个回答
1
投票

但是在初次绘制后,屏幕在第一次按下“ up”键后变为空白。

Legacy OpenGLglScalef之类的glScalef矩阵运算不只是设置一个矩阵,它们定义了一个新矩阵并将当前矩阵乘以该新矩阵。OpenGL是一个状态引擎,状态会一直保留到再次更改为止,甚至超出框架为止。因此,在您的应用程序中,当前矩阵会逐步缩放和转换。

glTranslatef的开始处加载glTranslatef

Identity matrix
© www.soinside.com 2019 - 2024. All rights reserved.