簡體   English   中英

Pyglet on_draw 不會繪制更新的 function

[英]Pyglet on_draw wont draw updated function

crtaj() function(主要繪圖函數)采用兩個全局矩陣“T”和“P”,使用這兩個矩陣對全局頂點“vrhovi”進行變換,並將變換后的頂點存儲到“novivrhovi”中,然后繪制使用變換頂點“novivrhovi”和全局“poligoni”的多邊形(描述頂點的連接)。 當按下“向上”鍵時,矩陣“T”和“P”被更新。 我想要的是繪制這些更新中的每一個,但是在初始繪制之后,在按下第一個“向上”后屏幕變為空白。 我 100% 確定我的轉換是可以的,因為按下一次鍵會給出我試圖設置為初始值的矩陣,並且它會正確繪制它,所以在使用默認初始值並按下時沒有理由不正確繪制,因為結果是相同的,function 甚至在我每次按“向上”時都會打印正確的頂點,但沒有顯示任何內容。

@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()

但在初始繪制后,第一次按下“向上”后屏幕變為空白。

傳統的 OpenGL矩陣運算(如glScalefglTranslatef不僅僅設置矩陣,它們定義一個新矩陣並將當前矩陣乘以新矩陣。
OpenGL 是一個 state 引擎,狀態會一直保留,直到它們再次更改,甚至超出幀。 因此,在您的應用程序中,當前矩陣會逐漸縮放和平移。

on_draw的開頭加載身份矩陣

@window.event
def on_draw():

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

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

    window.clear()
    crtaj()

PyGlet 默認將正交投影投影矩陣設置為 window 空間。 請參閱pyglet.window 如果您想要不同的投影,可以通過glOrtho設置:

@window.event
def on_draw():

    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0, window.width, window.height, 0, -1, 1)

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

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

    window.clear()
    crtaj()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM