我正在尝试在 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 中可视化这些点和线。
有人可以指导我吗?
绘制完所有几何体后,您需要更新一次显示,而不是在每个几何体之后更新它。所以在循环之后调用
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)