python的cubes怎么使用_如何使用python中的opengl?
上期跟大家說了關(guān)于python繪圖內(nèi)容,這期跟大家講講能夠構(gòu)造立體圖形的python內(nèi)容,感興趣的小伙伴可以來看下哦~
1.1 利用python的pygame和OpenGL制作動(dòng)態(tài)正方體cube。
1.2 安裝python3.8和pygame(省略)。
1.3 安裝OpenGL:pip?install?PyOpenGL?PyOpenGL_accelerate
效果圖【動(dòng)態(tài)】:
完整代碼:#---導(dǎo)出模塊---
import?pygame
from?pygame.locals?import?*
from?OpenGL.GL?import?*
from?OpenGL.GLU?import?*
#---初始化pygame和定義窗口大小---
pygame.init()
#OPENGL|DOUBLEBUF=DOUBLEBUF|OPENGL
#DOUBLEBUF:雙緩沖模式(推薦和?HWSURFACE?或?OPENGL?一起使用)
#創(chuàng)建一個(gè)?OPENGL?渲染的顯示
pygame.display.set_mode((640,480),?OPENGL|DOUBLEBUF)
#---元組定義---
#定義正方體的xyz坐標(biāo)點(diǎn)
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))
#?定義面,四個(gè)點(diǎn)構(gòu)成一個(gè)面
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))
#?定義線,兩個(gè)點(diǎn)構(gòu)成一個(gè)線
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),)
#---定義畫立方體函數(shù)---
def?drawcube():
#?"繪制正方體",zip和list法
allpoints?=?list(zip(CUBE_POINTS,?CUBE_COLORS))
#畫面積---開始---結(jié)束---
glBegin(GL_QUADS)
for?face?in?CUBE_QUAD_VERTS:
for?vert?in?face:
pos,?color?=?allpoints[vert]
#在第2個(gè)for下面
glColor3fv(color)
glVertex3fv(pos)
#與第1個(gè)for對(duì)齊
glEnd()
#邊線顏色黑色
glColor3f(0,?0,?0)
#?繪制線---開始---結(jié)束---
glBegin(GL_LINES)
for?line?in?CUBE_EDGES:
for?vert?in?line:
pos,?color?=?allpoints[vert]
glVertex3fv(pos)
glEnd()
#---主函數(shù)---
def?main():
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)
#啟動(dòng)循環(huán)---
while?True:
#事件檢測(cè)
event?=?pygame.event.poll()
#定義退出機(jī)制,在pygame的while循環(huán)中,這一步必備設(shè)置
if?event.type?==?QUIT?or?(event.type?==?KEYDOWN?and?event.key?==?K_ESCAPE):
break
#清除屏幕
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
#攝像機(jī)旋轉(zhuǎn)
glRotatef(1,0,1,0)
drawcube()
#刷新畫面
pygame.display.flip()
if?__name__?==?'__main__':
main()
以上內(nèi)容并不多,大家非常容易消化理解,如需了解更多python實(shí)用知識(shí),點(diǎn)擊進(jìn)入PyThon學(xué)習(xí)網(wǎng)教學(xué)中心。
總結(jié)
以上是生活随笔為你收集整理的python的cubes怎么使用_如何使用python中的opengl?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vector自动扩容如何实现_腾讯云Cl
- 下一篇: Java说明注释(Doc注释)