PyOpenGL 闪烁的点和线

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

我正在尝试在 PyOpenGL 中可视化 3D 人体关键点,如果有人在场,代码就可以正常工作。

超过一个,点和线开始闪烁。

while True:
        # Grab an image
        time_temp=time.time()
        
        def points(keypoints_3d):
            glEnable(GL_POINT_SMOOTH)
            glEnable(GL_BLEND)
            glEnable(GL_FRAMEBUFFER_SRGB)
            glPointSize(10)
            
            glBegin(GL_POINTS)
            glColor3d(1, 1, 1)
            
            for i in range(len(keypoints_3d)):
                glVertex3d(keypoints_3d[i][0]/100, keypoints_3d[i][1]/100, keypoints_3d[i][2]/100)
                #print("JNW",keypoints_3d[i][0])
            glEnd()

        def lines(keypoints_3d):
            glEnable(GL_POINT_SMOOTH)
            glEnable(GL_BLEND)
            glEnable(GL_FRAMEBUFFER_SRGB)
            glPointSize(10)
            glBegin(GL_LINES)
            glColor3d(1, 1, 1)
            
            for i in range(len(keypoints_3d)):
                if(i<5):
                    glVertex3d(keypoints_3d[i][0]/100, keypoints_3d[i][1]/100, keypoints_3d[i][2]/100)
                    glVertex3d(keypoints_3d[i+1][0]/100, keypoints_3d[i+1][1]/100, keypoints_3d[i+1][2]/100)

                #print("JNW",keypoints_3d[i][0])
            glEnd()

            
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        for body in bodies_list:
            points(keypoints_3d)
            lines(keypoints_3d)
            pygame.display.flip()
            pygame.time.wait(10)

我确信有更好的方法在 PyopenGl 中可视化这些点和线。

有人可以指导我吗?

python opengl pygame pyopengl
1个回答
1
投票

绘制完所有几何体后,您需要更新一次显示,而不是在每个几何体之后更新它。所以在循环之后调用

pygame.display.flip()
,但不在循环中:

while True:

    # [...]

    # clear display
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
    
    # draw all the geometry 
    for body in bodies_list:
        points(keypoints_3d)
        lines(keypoints_3d)
    
    # update the display
    pygame.display.flip()
    pygame.time.wait(10)
© www.soinside.com 2019 - 2024. All rights reserved.