文章插圖

文章插圖
1 說明:
【安卓如何查看手機opengl 手機openGL版本工具】1.1 利用python的pygame和OpenGL制作動態正方體cube 。
1.2 安裝python3.8和pygame(省略) 。
1.3 安裝OpenGL:
pip install PyOpenGL PyOpenGL_accelerate#---導出模塊---import pygamefrom pygame.locals import *from OpenGL.GL import *from OpenGL.GLU import *#---初始化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),)#---定義畫立方體函數---def drawcube():# "繪制正方體",zip和list法allpoints = list(zip(CUBE_POINTS, CUBE_COLORS))#畫面積---開始---結束---glBegin(GL_QUADS)for face in CUBE_QUAD_VERTS:for vert in face:pos, color = allpoints[vert]#在第2個for下面glColor3fv(color)glVertex3fv(pos)#與第1個for對齊glEnd()#邊線顏色黑色glColor3f(0, 0, 0)# 繪制線---開始---結束---glBegin(GL_LINES)for line in CUBE_EDGES:for vert in line:pos, color = allpoints[vert]glVertex3fv(pos)glEnd()#---主函數---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)#啟動循環---while True:#事件檢測event = pygame.event.poll()#定義退出機制,在pygame的while循環中,這一步必備設置if event.type == QUIT or (event.type == KEYDOWN and event.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()4 元組的定義和推導式:#---元組定義---#定義正方體的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),)# "繪制正方體"allpoints = list(zip(CUBE_POINTS, CUBE_COLORS))#print(allpoints)#print(allpoints[0])for face in CUBE_QUAD_VERTS:for vert in face:pos, color = allpoints[vert]#print(allpoints[vert])print(pos)print(color)5 簡化一些:這樣很熟悉一些 。#---元組定義---#定義正方體的xyz坐標點a = ((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顏色b = ((1, 0, 0), (1, 1, 0), (0, 1, 0), (0, 0, 0),(1, 0, 1), (1, 1, 1), (0, 0, 1), (0, 1, 1))# 定義面,四個點構成一個面c = ((0, 1, 2, 3), (3, 2, 7, 6), (6, 7, 5, 4),(4, 5, 1, 0), (1, 5, 7, 2), (4, 0, 3, 6))# 定義線,兩個點構成一個線d = ((0,1), (0,3), (0,4), (2,1), (2,3), (2,7),(6,3), (6,4), (6,7), (5,1), (5,4), (5,7),)# "繪制正方體"all = list(zip(a, b))#print(all)#print(all[0])for j in c:for i in j:pos, color = all[i]#print(all[i])print(pos)print(color)5.1 元組的元組5.2 zip函數
5.3 list函數:本來是列表的意思,發現還是元組,是元組的列表打包法 。
5.4 推導式嵌套推導式和元組推導器生成的生成器 。
for j in c:for i in j:#一行賦值pos, color = all[i]6 復習基礎知識:6.1 元組:
元組與列表類似,不同之處在于元組的元素不能修改 。
元組中只包含一個元素時,需要在元素后面添加逗號 。
元組的下標索引從0開始,可以進行截取,組合等 。
元組中的元素值是不允許刪除的,但我們可以使用del語句來刪除整個元組 。
6.2 zip函數:
是Python的內置函數 。
用于將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表 。
zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中為了減少內存,zip() 返回的是一個對象 。如需展示列表,需手動 list() 轉換 。
6.3 元組推導器生成的生成器 。
a=(255,35,55,45,85,550,650)b=(x for x in a if x<100)for i in b:print(i,end=' ')print(tuple(b)) #最后b元組里面沒有了上述執行結果:35 55 45 85 ()通過元組推導器生成的生成器對象可以通過for循環進行遍歷 。每訪問生成器對象中的一個元素,就會少一個元素 。
若想再使用該生成器對象,都必須重新創建一個生成器,因為遍歷后的原生成器對象已經不存在了 。
- class文件記事本打開全亂碼了 linux查看class文件內容亂碼
- word 2016如何激活 word2016激活工具使用方法
- 滴滴打車如何注冊私家車 私家車怎么能加入滴滴打車
- iphone電池如何激活電池 蘋果手機電池怎么激活
- word里如何導出圖片 word里的圖片如何導出來
- 如何讓前任主動找你 分手了怎么讓他主動聯系我
- 如何掙脫婚外情的困擾 與婚外情人分手如何挽回
- 皮鞋濕了如何防止發霉 皮鞋的日常保養小妙招
- 椰子如何吃呢
- 如何挑選椰子呢
