上期跟大家说了关于python绘图内容,这期跟大家讲讲能够构造立体图形的python内容,感兴趣的小伙伴可以来看下哦~
1.1 利用python的pygame和OpenGL制作动态正方体cube。
1.2 安装python3.8和pygame(省略)。
1.3 安装OpenGL:
pipinstallPyOpenGLPyOpenGL_accelerate
效果图【动态】:
完整代码:
#---导出模块--- importpygame frompygame.localsimport* fromOpenGL.GLimport* fromOpenGL.GLUimport* #---初始化pygame和定义窗口大小--- pygame.init() #OPENGL|DOUBLEBUF=DOUBLEBUF|OPENGL #DOUBLEBUF:双缓冲模式(推荐和HWSURFACE或OPENGL一起使用) #创建一个OPENGL渲染的显示 pygame.display.set_mode((640,480),OPENGL|DOUBLEBUF) #---元组定义--- #定义正方体的xyz坐标点 CUBE_POINTS=((0.5,-0.5,-0.5),(0.5,0.5,-0.5),(-0.5,0.5,-0.5),(-0.5,-0.5,-0.5),(0.5,-0.5,0.5),(0.5,0.5,0.5),(-0.5,-0.5,0.5),(-0.5,0.5,0.5)) #定义RGB颜色 CUBE_COLORS=((1,0,0),(1,1,0),(0,1,0),(0,0,0),(1,0,1),(1,1,1),(0,0,1),(0,1,1)) #定义面,四个点构成一个面 CUBE_QUAD_VERTS=((0,1,2,3),(3,2,7,6),(6,7,5,4),(4,5,1,0),(1,5,7,2),(4,0,3,6)) #定义线,两个点构成一个线 CUBE_EDGES=((0,1),(0,3),(0,4),(2,1),(2,3),(2,7),(6,3),(6,4),(6,7),(5,1),(5,4),(5,7),) #---定义画立方体函数--- defdrawcube(): #"绘制正方体",zip和list法 allpoints=list(zip(CUBE_POINTS,CUBE_COLORS)) #画面积---开始---结束--- glBegin(GL_QUADS) forfaceinCUBE_QUAD_VERTS: forvertinface: pos,color=allpoints[vert] #在第2个for下面 glColor3fv(color) glVertex3fv(pos) #与第1个for对齐 glEnd() #边线颜色黑色 glColor3f(0,0,0) #绘制线---开始---结束--- glBegin(GL_LINES) forlineinCUBE_EDGES: forvertinline: pos,color=allpoints[vert] glVertex3fv(pos) glEnd() #---主函数--- defmain(): glEnable(GL_DEPTH_TEST) #初始化摄像头 glMatrixMode(GL_PROJECTION) gluPerspective(45.0,640/480.0,0.1,100.0) glTranslatef(0.0,0.0,-3.0) glRotatef(25,1,0,0) #启动循环--- whileTrue: #事件检测 event=pygame.event.poll() #定义退出机制,在pygame的while循环中,这一步必备设置 ifevent.type==QUITor(event.type==KEYDOWNandevent.key==K_ESCAPE): break #清除屏幕 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) #摄像机旋转 glRotatef(1,0,1,0) drawcube() #刷新画面 pygame.display.flip() if__name__=='__main__': main()
以上内容并不多,大家非常容易消化理解,如需了解更多python实用知识,点击进入PyThon学习网教学中心。