图元:四棱锥\立方体\扇形\带孔圆盘\圆柱体\球体

🏷️ 365bet365.com 📅 2026-02-14 23:43:11 👤 admin 👀 8744 ❤️ 284
图元:四棱锥\立方体\扇形\带孔圆盘\圆柱体\球体

技术

PyOpenGL

run函数的运行框架

https://www.cnblogs.com/lusonixs/p/17038379.html

四棱锥

摆放方面

四棱锥放在左侧,可以看到一部分侧面。(摆放在正中可能就看不到了)

模型方面

因为看不到底面,就省略了底面的绘制。

代码(py)

def drawObject():

# 三角形

# 先移动到三角形的中心位置开始绘制

# 为了看到全貌,距离屏幕6个单位的地方绘制

# 四棱锥放在左侧,可以看到一部分侧面。(摆放在正中可能就看不到了)

glTranslatef(-1.5,0.0,-6.0)

glBegin(GL_TRIANGLES)

# 前侧面

glColor3f(1.0,0.0,0.0) # 红色

glVertex3f( 0.0, 1.0, 0.0) # 三角形的上顶点 (前侧面)

glColor3f(0.0,1.0,0.0) # 绿色

glVertex3f(-1.0,-1.0, 1.0) # 三角形的左下顶点 (前侧面)

glColor3f(0.0,0.0,1.0) # 蓝色

glVertex3f( 1.0,-1.0, 1.0) # 三角形的右下顶点 (前侧面)

# 右侧面

glColor3f(1.0,0.0,0.0) # 红色

glVertex3f( 0.0, 1.0, 0.0) # 三角形的上顶点 (右侧面)

glColor3f(0.0,0.0,1.0) # 蓝色

glVertex3f( 1.0,-1.0, 1.0) # 三角形的左下顶点 (右侧面)

glColor3f(0.0,1.0,0.0) # 绿色

glVertex3f( 1.0,-1.0, -1.0) # 三角形的右下顶点 (右侧面)

# 后侧面

glColor3f(1.0,0.0,0.0) # 红色

glVertex3f( 0.0, 1.0, 0.0) # 三角形的上顶点 (后侧面)

glColor3f(0.0,1.0,0.0) # 绿色

glVertex3f( 1.0,-1.0, -1.0) # 三角形的左下顶点 (后侧面)

glColor3f(0.0,0.0,1.0) # 蓝色

glVertex3f(-1.0,-1.0, -1.0) # 三角形的右下顶点 (后侧面)

# 左侧面

glColor3f(1.0,0.0,0.0) # 红色

glVertex3f( 0.0, 1.0, 0.0) # 三角形的上顶点 (左侧面)

glColor3f(0.0,0.0,1.0) # 蓝色

glVertex3f(-1.0,-1.0,-1.0) # 三角形的左下顶点 (左侧面)

glColor3f(0.0,1.0,0.0) # 绿色

glVertex3f(-1.0,-1.0, 1.0) # 三角形的右下顶点 (左侧面)

glEnd()

run(drawObject)

立方体

代码(py)

def drawObject():

# 立方体

# 先移动到立方体的中心位置开始绘制

# 为了看到全貌,距离屏幕6个单位的地方绘制

# 立方体放在右侧,可以看到一部分侧面。(摆放在正中可能就看不到了)

glTranslatef(1.5,0.0,-6.0)

glBegin(GL_QUADS)

# 顶面

glColor3f(0.0,1.0,0.0) # 颜色改为蓝色

glVertex3f( 1.0, 1.0,-1.0) # 四边形的右上顶点 (顶面)

glVertex3f(-1.0, 1.0,-1.0) # 四边形的左上顶点 (顶面)

glVertex3f(-1.0, 1.0, 1.0) # 四边形的左下顶点 (顶面)

glVertex3f( 1.0, 1.0, 1.0) # 四边形的右下顶点 (顶面)

# 底面

glColor3f(1.0,0.5,0.0) # 颜色改成橙色

glVertex3f( 1.0,-1.0, 1.0) # 四边形的右上顶点(底面)

glVertex3f(-1.0,-1.0, 1.0) # 四边形的左上顶点(底面)

glVertex3f(-1.0,-1.0,-1.0) # 四边形的左下顶点(底面)

glVertex3f( 1.0,-1.0,-1.0) # 四边形的右下顶点(底面)

# 前面

glColor3f(1.0,0.0,0.0) # 颜色改成红色

glVertex3f( 1.0, 1.0, 1.0) # 四边形的右上顶点(前面)

glVertex3f(-1.0, 1.0, 1.0) # 四边形的左上顶点(前面)

glVertex3f(-1.0,-1.0, 1.0) # 四边形的左下顶点(前面)

glVertex3f( 1.0,-1.0, 1.0) # 四边形的右下顶点(前面)

# 后面

glColor3f(1.0,1.0,0.0) # 颜色改成黄色

glVertex3f( 1.0,-1.0,-1.0) # 四边形的右上顶点(后面)

glVertex3f(-1.0,-1.0,-1.0) # 四边形的左上顶点(后面)

glVertex3f(-1.0, 1.0,-1.0) # 四边形的左下顶点(后面)

glVertex3f( 1.0, 1.0,-1.0) # 四边形的右下顶点(后面)

# 左面

glColor3f(0.0,0.0,1.0) # 颜色改成蓝色

glVertex3f(-1.0, 1.0, 1.0) # 四边形的右上顶点(左面)

glVertex3f(-1.0, 1.0,-1.0) # 四边形的左上顶点(左面)

glVertex3f(-1.0,-1.0,-1.0) # 四边形的左下顶点(左面)

glVertex3f(-1.0,-1.0, 1.0) # 四边形的右下顶点(左面)

# 右面

glColor3f(1.0,0.0,1.0) # 颜色改成紫罗兰色

glVertex3f( 1.0, 1.0,-1.0) # 四边形的右上顶点(右面)

glVertex3f( 1.0, 1.0, 1.0) # 四边形的左上顶点(右面)

glVertex3f( 1.0,-1.0, 1.0) # 四边形的左下顶点(右面)

glVertex3f( 1.0,-1.0,-1.0) # 四边形的右下顶点(右面)

glEnd()

run(drawObject)

扇形

特点

* 没有厚度。

* 圆盘位于X0Y平面。

代码(py)

p1=0

p2=0.01

part1=0

part2=0

def DrawCylinder():

global p1,p2,part1,part2

part1+=p1

part2+=p2

if part1>359:

p1=0

part1=0

p2=0.01

part2=0

if part2>359:

p1=0.01

p2=0

glTranslatef(0.0, 0.0, -5.0)

Q=gluNewQuadric()

glColor3f(1.0, 1.0, 1.0) # 白色的圆锥体

gluPartialDisk(Q,0.5,1.5,32,32,part1,part2-part1)

gluDeleteQuadric( Q )

run(DrawCylinder)

带孔圆盘 绕Y轴旋转

创建一个CD样子的带孔圆盘。

特点

* 没有厚度。

* 圆盘位于X0Y平面。

代码(py)

rtri=0

def DrawDisk():

global rtri

glTranslatef(0.0, 0.0, -5.0)

Q=gluNewQuadric()

glRotatef(rtri,0.0,1.0,0.0)

glColor3f(1.0, 1.0, 1.0) # 白色的圆柱体

gluDisk(Q,0.5,1.5,32,32)

gluDeleteQuadric( Q )

rtri+=0.02

run(DrawDisk)

圆柱体 绕Y轴旋转

特点

* 没有顶面和底面。

* 圆柱体底面默认为X0Y平面。

* 圆柱体顶面默认向Z轴正方向延伸。

代码(py)

rtri=0

def DrawCylinder():

global rtri

glTranslatef(0.0, 0.0, -5.0)

Q=gluNewQuadric()

glRotatef(rtri,0.0,1.0,0.0)

glColor3f(1.0, 1.0, 1.0) # 白色的圆柱体

gluCylinder(Q,1.0,1.0,3.0,32,32)

gluDeleteQuadric( Q )

rtri+=0.02

run(DrawCylinder)

二次曲面:球体

二次曲面绘制的球,包括两层纹理,一层是球的纹理,一层是高光纹理,高光纹理以40%的透明度混合而成。

代码(py)

ballr=0.17

def DrawBall():

glTranslatef(0.0, 0.0, -5.0)

Q=gluNewQuadric()

gluQuadricNormals(Q, GL_SMOOTH)

gluQuadricTexture(Q, GL_TRUE)

glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)

glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP)

glColor3f(1.0, 1.0, 1.0) # 白色的球

glBindTexture( GL_TEXTURE_2D, LoadTextures('Ball.bmp') ) # 球的纹理贴图

global ballr

gluSphere(Q, ballr*2, 32, 32)

glBindTexture( GL_TEXTURE_2D, LoadTextures('Envroll.bmp') ) # 设置为环境纹理

glColor4f(1.0, 1.0, 1.0, 0.4) # 使用alpha为40%的白色

glEnable(GL_BLEND) # 启用混合

glBlendFunc(GL_SRC_ALPHA, GL_ONE) # 把原颜色的40%与目标颜色混合

glEnable(GL_TEXTURE_GEN_S)

glEnable(GL_TEXTURE_GEN_T)

gluSphere(Q, ballr*2, 32, 32) # 绘制球体,并混合

glDisable(GL_TEXTURE_GEN_S)

glDisable(GL_TEXTURE_GEN_T)

glDisable(GL_BLEND)

gluDeleteQuadric( Q )

run(DrawBall)

相关推荐

联想 Z50怎么样,优点,缺点,点评
日博和365是一样的么

联想 Z50怎么样,优点,缺点,点评

📅 09-05 👀 2304
什么什么知秋的成语
365bet娱乐场开户

什么什么知秋的成语

📅 11-01 👀 5497