惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - EpicBlue

绘制图元:线段、三角形、四边形 PyOpenGL 初始化框架 PaddleDetection的CPU训练 数独计算(C#) android TCP 客户端(仅接收数据) 管理自己的电子书(2) 管理自己的电子书 排列组合的递归实现 状态机参考 状态机 附 (一)nDoc相关资源 nDoc分析 (二) BaseDocumenter nDoc分析 (一) 可怜的nDoc 求助, Acess + winform无法Update的问题 查询面板(三) 查询面板(二) 查询面板(一) 接触ADO.Net 数据库查询 一个不成熟的程序员
图元:四棱锥\立方体\扇形\带孔圆盘\圆柱体\球体 - EpicBlue - 博客园
EpicBlue · 2023-02-27 · via 博客园 - EpicBlue

技术

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)