python - PyOpenGL闪烁的点和线

标签 python opengl pygame pyopengl

我正在尝试在 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)

enter image description here

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

有人可以指导我吗?

最佳答案

绘制完所有几何图形后,您需要更新一次显示,而不是在每个几何图形之后更新它。所以调用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)

关于python - PyOpenGL闪烁的点和线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77058208/

相关文章:

c++ - 在同一个应用程序中使用 Legacy OpenGL 和 Modern OpenGL

c++ - 没有 glVertexPointer,通用顶点属性缓冲区似乎不起作用

opengl - 色彩空间、 Gamma 和图像增强

python - 当您移动/拖动窗口时,为什么 pygame 在 pygame.event.get() 卡住?

python - 为什么 pygame 可能会加载灰度图像?

python - pyqt5不显示窗口

python - 在 App Engine 应用之间移动特定的 Google 数据存储区实体

python - Django 显示用户收藏夹页面

python - 运行时错误 : Invalid DISPLAY variable

python - 为什么 pygame 上两个移动物体之间的碰撞不起作用?