一篇就够的超良心pyOpenGL入门教程,不香喷我! - CSDN博客
文章推薦指數: 80 %
OpenGL (python版本)OpenGL是用于渲染2D、3D矢量图形的扩语言、跨平台的应用程序编程接口。
这个接口由近350个不同的函数调用组成,用来从简单的图形 ...
一篇就够的超良心pyOpenGL入门教程,不香喷我!
光子俊
于 2020-03-0513:56:24 发布
8282
收藏
80
分类专栏:
python
编程语言
科研小技巧
文章标签:
c++
python
opengl
可视化
版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/edj_13/article/details/104673528
版权
python
同时被3个专栏收录
11篇文章
8订阅
订阅专栏
编程语言
22篇文章
2订阅
订阅专栏
科研小技巧
17篇文章
4订阅
订阅专栏
OpenGL(python版本)
OpenGL是用于渲染2D、3D矢量图形的扩语言、跨平台的应用程序编程接口。
这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。
而另一种程序接口系统是仅用于MicrosoftWindows上的Direct3D。
OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。
博客内容是基于pythonOpenGL进行讲解,感觉C++有点难,等到后面有时间了再学习,不过都是想通的,我是基于C++教程或网站整理的,对于python开发者或者C++开发者都是适用的。
划重点了!!!
这次真的很用心在做这个教程,绘图整理不易希望大家点赞,关注一波!!!,这样我才能更加努力创作呀!!!
1.第一个例子
首先在上一小节安装好OpenGL后我们先不管其他的先运行一个例子看看效果,对于这个例子的细节我们可以先忽略,我就简单把它作为后面讲解的模板了,废话不多说先上代码:
importnumpyasnp
fromOpenGL.GLimport*
fromOpenGL.GLUimport*
fromOpenGL.GLUTimport*
classDemo(object):
def__init__(self):
#self.geometry=geometry
glutInit()#启动glut
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA)
glutInitWindowSize(400,400)
glutCreateWindow(b"HelloOpenGL")#设定窗口标题
glutDisplayFunc(self.draw_geometry)#调用函数绘制
self.init_condition()#设定背景
glutMainLoop()
definit_condition(self):
glClearColor(1.0,1.0,1.0,1.0)#定义背景为白色
gluOrtho2D(-8.0,8.0,-8.0,8.0)#定义xy轴范围
defrender(self):
pass
defdraw_geometry(self):
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0,0.0,0.0)#设定颜色RGB
glBegin(GL_QUADS)
glVertex2f(-2,2)
glVertex2f(-2,5)
glVertex2f(-5,5)
glVertex2f(-5,2)
glEnd()
glFlush()#执行绘图
if__name__=="__main__":
Demo()
运行上述代码后相应的显示为:
通过上面的例子我们简单运行了一个例子,请大家将代码拷贝为你的模板,将在后面学习中继续使用呢,好了接下来就开始我们的OpenGL学习之旅吧!
2.基本属性
绘制一个基本的二维或三维图形都是从最基本的坐标系统和绘制点、线和多边形开始,首先需要了解这些的基本约定,这一节讨论xy平面或xyz空间固定位置的绘制图形。
注意:所有调用glVertex*的命令必须通过OpenGL的命令glBegin()和glEnd()括起来,这两个命令给出了绘图的信号。
相应的语法为:
glBegin(mode)
.....
glEnd()
相应的mode为由矢量指定的类型,总共可以接受10个符号常数,分别为:GL_POINTS,GL_LINES,GL_LINE_STRIP,GL_LINE_LOOP,GL_TRIANGLES,GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN,GL_QUADS,GL_QUAD_STRIP和GL_POLYGON。
上述不同的mode参数的意义可通过下面的示意图给出相应的解释:通过上面的几个示意图就可以清晰了解我们在绘图时需要选择的mode是啥了,是不是感觉超级简单,感觉这一块内容下面的都不要看了呢!
点
通过下面的语句可画出三个点:
glBegin(GL_POINTS)
glVertex2f(1.0,1.0)
glVertex2f(2.0,1.0)
glVertex2f(2.0,2.0)
glEnd()
将其写入一个函数利用**glutDisplayFunc(self.draw_point)**调用,相应函数如下:
defdraw_point(self):
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0,0.0,0.0)#设定颜色RGB
glBegin(GL_POINTS)
glVertex2f(1.0,1.0)
glVertex2f(2.0,1.0)
glVertex2f(2.0,2.0)
glEnd()
glFlush()
通过运行我们发现绘制的点非常小,几乎看不见,我们可通过调用下面函数来显示点的大小:
glPointSize(n)
#Pointsarenpixelsindiameter
glEnable(GL_POINT_SMOOTH)
glHint(GL_POINT_SMOOTH_HINT,GL_NICEST)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
最终效果图为:
线
类似的线的绘制命令如下:
glBegin(GL_LINES)
glVertex3f(x1,y1,z1)
glVertex3f(x2,y2,z2)
glVertex3f(x3,y3,z3)
glVertex3f(x4,y4,z4)
glEnd()
当然如果你嫌画的线条太细,可通过下面下面命令平滑和加宽线条:
glLineWidth(n)#Linesarenpixelswide
glEnable(GL_Line_SMOOTH)
glHint(GL_Line_SMOOTH_HINT,GL_NICEST)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)
多边形
类似的通过下面的命令绘制三角形:
glBegin(GL_TRIANGLES)
glVertex3f(x1,y1,z1)
glVertex3f(x2,y2,z2)
glVertex3f(x3,y3,z3)
glEnd()
下面通过绘制一个三角形来加深我们的理解,具体效果如下:
相应的定义三角形的函数式为:
defdraw_triangles(self):
glClear(GL_COLOR_BUFFER_BIT)
glBegin(GL_TRIANGLES)
glColor3f(1,0,0)
glVertex3f(-0.5,-0.5,0.0)
glColor3f(0,1,0)
glVertex3f(0.5,-0.5,0)
glColor3f(0,0,1)
glVertex3f(0,0.5,0)
glEnd()
glFlush()
而绘制四边形命令为:
glBegin(GL_QUADS)
glVertex3f(x1,y1,z1)
......
glVertex3f(xn,yn,zn)
glEnd()
现在我们再绘制一个实例来加深我们的理解,相应效果图为:
具体的绘制图形的函数式为:
defdraw_polygon(self):
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0,1.0,1.0)#设定颜色RGB
glBegin(GL_LINES)
datas=[-2.5+i*0.25foriinrange(21)]
foriindatas:
glVertex3f(i,0,2.5)
glVertex3f(i,0,-2.5)
glVertex3f(2.5,0,i)
glVertex3f(-2.5,0,i)
glEnd()
glBegin(GL_TRIANGLE_STRIP)
glColor3f(1,1,1)
glVertex3f(0,2,0)
glColor3f(1,0,0)
glVertex3f(-1,0,1)
glColor3f(0,1,0)
glVertex3f(1,0,1)
glColor3f(0,0,1)
glVertex3f(0,0,-1.4)
glColor3f(1,1,1)
glVertex3f(0,2,0)
glColor3f(1,0,0)
glVertex3f(-1,0,1)
glEnd()
glFlush()
通过这一小节的学习我们熟悉了PyOpenGL中基本元素的绘制,可以利用基本模板绘制图形,而OpenGL的学习之旅才真正的开始,涉及到的东西还比较多,下面大家可以自己尝试构建一下下面的实例,具体实现后面揭晓。
课后作业:
光子俊
关注
关注
26
点赞
踩
80
收藏
打赏
7
评论
一篇就够的超良心pyOpenGL入门教程,不香喷我!
OpenGL(python版本)OpenGL是用于渲染2D、3D矢量图形的扩语言、跨平台的应用程序编程接口。
这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。
而另一种程序接口系统是仅用于MicrosoftWindows上的Direct3D。
OpenGL常用于CAD、虚拟实境、科学可视化程序和电子游戏开发。
博客内容是基于pythonOpenGL进行讲解,感觉C+...
复制链接
扫一扫
专栏目录
加州理工大学PythonOpenGL教程
10-01
加州理工大学PythonOpenGL教程,清楚简单,适合初学者,若有任何学术/技术上的以为,欢迎与我交流[email protected]
pyOpenGL教程
05-30
pythonandopengl使用介绍PPT
评论 7
您还未登录,请先
登录
后发表或查看评论
PyOpenGL骨架动画:使用PyOpenGL的OpenGL骨架动画
02-04
PyOpenGL骨骼动画
使用PyOpenGL的OpenGL骨骼动画
SebastianLague的Blender教程
TheThinMatrix的骨骼动画教程
PyOpenGL-skeleton-animtioncsdn博客页面
动画gif
PyOpenGL——走进3D的世界
qq_45362415的博客
02-27
5097
本文主要记录本人在学习PyOpenGL库的过程中的学习经验和所遇问题的解决办法。
Python绘制3D图(键盘控制)
苦涩精灵的博客
07-26
631
importsys
fromOpenGL.GLimport*
fromOpenGL.GLUTimport*
fromOpenGL.GLUimport*
fromPILimportImage
classMyPyOpenGLTest:
def__init__(self,width=640,height=480,title="KeyboardControl"):
glutInit(sys.argv)
glutInitDisplayMod
pyopengl简单教程.zip
09-23
pyopengl简单教程
超简单的PyOpenGL安装教程,我竟然还要总结一下,有毒!!!
光子俊的博客
03-04
2012
PyOpenGL安装教程
基本介绍
安装教程
PyOpenGL一般通过运行pip命令安装:
pipinstallPyOpenGLPyOpenGL_accelerate
一般通过上述命令就可以,当然出现下面问题也可以下载.whl文件进行下载:
通过pip安装失败(一般不会出现)
对于windows用户出现版本不匹配或者安装后出现问题
因此对于windows用户可以通过下载.whl文件...
Pyopengl入门系列(一)你好,窗口
q136446838的博客
01-06
372
文章目录1参考资料2入门指引2.1本系列教程起点与终点3利用Pyopengl画一个窗口3.1先亮出代码3.2简化版本
本人这段时间正在做opengl和opencv结合的工作,本打算利用python快速实现,却在项目深入的过程中遇到了许多的OpenGL的相关问题。
网上多数教程都是几篇教程衍生出来,可以解决我的一部分问题,但是并不全面。
自己特此参考一篇c++教程,将其改为python实现。
以记录此段过程之艰辛。
1参考资料
1.C++的opengl教程:link.
2.python的pyopen
【译】【PyOpenGL教程-着色器简介】第一步(基本几何)
赞美月亮的专栏
05-16
3804
原文地址:http://pyopengl.sourceforge.net/context/tutorials/shader_1.html
第一步(基本几何)
在本教程中我们将会学到:
-顶点着色器在GLSL中“必须”做什么
-片元着色器“必须”做什么
-什么是VBO对象
-如何激活和停用着色器和VBO
-如何渲染简单的几何体
首先我们进行imports,OpenG...
PyOpenGL的环境配置心得
不甘平凡的小鸟的专栏
11-27
539
使用pyqt5+pyopengl的注意项
从零开始PyopenGL(1):简单图形绘制
link的博客
03-23
9386
不多废话上代码,注释应该很清楚了#!/usr/bin/envpython
#-*-coding:utf-8-*-
#@Time:2018/3/2316:25
#@Author:Barry
#@Site:
#@File:learn.py
#@Software:PyCharm
fromOpenGL.GLimport*
fromOpe...
使用PyOpenGL绘制三维坐标系实例
09-18
今天小编就为大家分享一篇使用PyOpenGL绘制三维坐标系实例,具有很好的参考价值,希望对大家有所帮助。
一起跟随小编过来看看吧
Pygame+PyOpengl我的世界
最新发布
07-24
使用Pygame,PyOpengl来实现我的世界游戏有物品栏+icon+主界面需要使用pipinstall-rrequirements.txt来安装库!!!(其他版本的库可能没用)不是来自fogleman!!!!!!
pyopengl.rar
09-23
pythonpyopengl64位的包64位系统必须使用64位的
【译】【PyOpenGL教程-介绍着色器】漫反射、环境光、平行光
赞美月亮的专栏
05-16
2105
漫反射、环境光、方向光
原文地址:http://pyopengl.sourceforge.net/context/tutorials/shader_5.html
本教程在以往教程的基础上添加了:
-环境光
-漫射光
-方向光(如,太阳)
-法线、法线矩阵
照明是渲染流程中最复杂的部分之一。
目前还没有人提出一种“完美”的实时图像渲染模拟方案(即使是非实时图像也没有真正解决所有材...
pyopengl纹理,为什么我不能在pyopengl中绘制纹理?
weixin_34969621的博客
12-24
34
I'vegonethroughmanytutorialsandstillIcan'tfigureoutwhatI'mdoingwrong.IfIdisabletexturesitcorrectlydrawsawhitecubebutwhenIenabletexturesitdrawsnothing(orblacksquares...
pyopengl纹理_为什么这段代码不能在pyopenGL中显示我的纹理
weixin_39699746的博客
12-24
42
我试着让多程纹理为我工作,但现在我可以让简单的纹理工作,谁能用下面的代码来做什么。
这个例子只是将多边形显示为白色,而不是纹理。
在defloadTexture(name):img=PIL.Image.open(name)#.jpg,.bmp,etc.alsoworkimg_data=numpy.array(list(img.getdata()),numpy.int8)id=...
PyOpenGL之3D界面详解(一)
absinjun的博客
07-25
3403
本文转自:http://eyehere.net/2011/learn-opengl-3d-by-pyopengl-1/
承
从pygame的系列教程里3D部分,本想好好说一下OpenGL的,但是感觉这样一来就喧宾夺主了,毕竟OpenGL这东西,好好说明下来要比pygame更加博大精深,所以就考虑另外起一个教程来写着了。
如今pygame的说明基本完成,实战篇完成两个以后,第三个写起来实在...
【译】【PyOpenGL教程-介绍着色器】要求与配置
赞美月亮的专栏
05-16
830
原文地址:http://pyopengl.sourceforge.net/context/tutorials/shader_intro.html
要求/设置
本教程介绍了现代的低级3D渲染技术。
它尽量避免使用“传统”OpenGL入口点。
尽管在可预见的将来,传统的OpenGL可能会在大多数台式机或笔记本电脑的硬件上得到支持,但从技术上讲,它们的使用是不受欢迎的。
我们假设你了解:
-一...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022CSDN
皮肤主题:数字20
设计师:CSDN官方博客
返回首页
光子俊
CSDN认证博客专家
CSDN认证企业博客
码龄5年
暂无认证
33
原创
8万+
周排名
103万+
总排名
16万+
访问
等级
1151
积分
96
粉丝
181
获赞
32
评论
733
收藏
私信
关注
热门文章
毕业论文参考文献格式GB/T7714的Endnote设置教程
86576
Python将数据写入文件
22925
一篇就够的超良心pyOpenGL入门教程,不香喷我!
8265
Python批处理文件夹中的txt文件
7038
机器学习线性模型:一元线性回归问题实现(matlab)
6157
分类专栏
linux技巧
4篇
EPICS
1篇
PLC
1篇
S7-Graph
1篇
软件安装
1篇
python
11篇
Git
1篇
GitHub
1篇
编程语言
22篇
科研小技巧
17篇
机器学习
6篇
推荐系统
1篇
概率统计学
1篇
数据结构与算法
1篇
最新评论
一篇就够的超良心pyOpenGL入门教程,不香喷我!
weixin_55270244:
博主你好!请问怎么用pyOpenGL加载STL模型
解决Centos缺少共享库:libstdc++.so.6(完美解决)
tcconan:
yuminstalllibstdc++-4.8.5-44.el7.i868
写错了i868改一下i686,作者辛苦手敲的
yuminstalllibstdc++-4.8.5-44.el7.i686
解决Centos缺少共享库:libstdc++.so.6(完美解决)
qq_39417448:
yum出不来这个安装包怎么办
毕业论文参考文献格式GB/T7714的Endnote设置教程
xiamixiami1998:
很好用爱了爱了
毕业论文参考文献格式GB/T7714的Endnote设置教程
LuoBo2021:
多谢楼主,帮了大忙!
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
电脑上CapsLK大小写迟缓的解决办法
Centos系统下安装EPICS系统
如何科学的在Linux系统下添加环境变量
2022年1篇
2021年5篇
2020年16篇
2019年11篇
目录
目录
分类专栏
linux技巧
4篇
EPICS
1篇
PLC
1篇
S7-Graph
1篇
软件安装
1篇
python
11篇
Git
1篇
GitHub
1篇
编程语言
22篇
科研小技巧
17篇
机器学习
6篇
推荐系统
1篇
概率统计学
1篇
数据结构与算法
1篇
目录
评论 7
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
光子俊
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:--)
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值
延伸文章資訊
- 1PyOpenGL -- The Python OpenGL Binding
PyOpenGL is the most common cross platform Python binding to OpenGL and related APIs. The binding...
- 2PyOpenGL基礎 - MahalJsp
本篇討論在Python中使用PyQt5 視窗環境,將OpenGL運算後的資料, ... gl.glViewport(0, 0, width, height) def processInput(w...
- 3ImportError: No module named OpenGL.GL - Stack Overflow
basically you need to install opengl but the library in python is called pyopengl not opengl you ...
- 4Python安裝設定OpenGL環境的全過程記錄 - IT145.com
下載與自己Python版本合適的,執行命令:pip install XXX.whl 即可正常使用pyopengl環境。 測試環境程式碼. from OpenGL.GL import * from...
- 5PyOpenGl的基本使用- 码迷-wjz - 博客园
Python 旗下,影响较大的三维库有pyOpenGl / VT. ... 我第一次接触OpenGL 的GL / GLU / GLUT 的时候,一下就被这些长得像孪生兄弟的库名字给整懵圈 ...