【pyopenGL编程手册- 01/20】pyopenGL安装和简要说明

2024-02-17 13:28

本文主要是介绍【pyopenGL编程手册- 01/20】pyopenGL安装和简要说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、说明
  • 二、测试系统安装的健康性
  • 三、安装64位的openGL
  • 四、写给程序员的
    • 4. 1 函数库介绍
    • 4.2 库内函数的命名
  • 五、常见库的函数介绍
    • 5.1 OpenGL 核心库 GL
    • 5.2 OpenGL 实用库 GLU
    • 5.3 OpenGL 工具库 GLUT
    • 5.4 Windows 专用库 WGL
  • 六、错误引发点和异常追踪
    • 6.1 错误检查开关
    • 6.2 错误发源地
    • 6.3 日志记录

一、说明

  OpenGL(Open Graphics Library,译为“开放式图形库”) 是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形元件到复杂的三维景象。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

二、测试系统安装的健康性

  如果您的pyopenGL系统安装方法是:

$ pip install PyOpenGL PyOpenGL_accelerate

这是一个平庸的安装,那么,测试一下吧!执行下列代码:

# -*- coding: utf-8 -*-# -------------------------------------------
# quidam_01.py 三维空间的世界坐标系和三角形
# -------------------------------------------from OpenGL.GL import *
from OpenGL.GLUT import *def draw():# ---------------------------------------------------------------glBegin(GL_LINES)  # 开始绘制线段(世界坐标系)# 以红色绘制x轴glColor4f(1.0, 0.0, 0.0, 1.0)  # 设置当前颜色为红色不透明glVertex3f(-0.8, 0.0, 0.0)  # 设置x轴顶点(x轴负方向)glVertex3f(0.8, 0.0, 0.0)  # 设置x轴顶点(x轴正方向)# 以绿色绘制y轴glColor4f(0.0, 1.0, 0.0, 1.0)  # 设置当前颜色为绿色不透明glVertex3f(0.0, -0.8, 0.0)  # 设置y轴顶点(y轴负方向)glVertex3f(0.0, 0.8, 0.0)  # 设置y轴顶点(y轴正方向)# 以蓝色绘制z轴glColor4f(0.0, 0.0, 1.0, 1.0)  # 设置当前颜色为蓝色不透明glVertex3f(0.0, 0.0, -0.8)  # 设置z轴顶点(z轴负方向)glVertex3f(0.0, 0.0, 0.8)  # 设置z轴顶点(z轴正方向)glEnd()  # 结束绘制线段# ---------------------------------------------------------------glBegin(GL_TRIANGLES)  # 开始绘制三角形(z轴负半区)glColor4f(1.0, 0.0, 0.0, 1.0)  # 设置当前颜色为红色不透明glVertex3f(-0.5, -0.366, -0.5)  # 设置三角形顶点glColor4f(0.0, 1.0, 0.0, 1.0)  # 设置当前颜色为绿色不透明glVertex3f(0.5, -0.366, -0.5)  # 设置三角形顶点glColor4f(0.0, 0.0, 1.0, 1.0)  # 设置当前颜色为蓝色不透明glVertex3f(0.0, 0.5, -0.5)  # 设置三角形顶点glEnd()  # 结束绘制三角形# ---------------------------------------------------------------glFlush()  # 清空缓冲区,将指令送往硬件立即执行if __name__ == "__main__":glutInit()                            # 1. 初始化glut库glutCreateWindow('Quidam Of OpenGL')  # 2. 创建glut窗口glutDisplayFunc(draw)                 # 3. 注册回调函数draw()glutMainLoop()                        # 4. 进入glut主循环

如果出现下列错误提示,一点也不奇怪:

And the error I receive is OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling

  这一般是因为库文件freeglut_ DLL 找不到引起,也有说是32位版本,需要用64位版本去替换。

三、安装64位的openGL

  步骤如下:

  1. pip uninstall pyopengl // 先卸载老程序
  2. 再下载一个weel文件,(先检查python版本)在这个地址去找:https://drive.google.com/drive/folders/1mz7faVsrp0e6IKCQh8MyZh-BcCqEGPwx
  3. pip install .\PyOpenGL-3.1.7-cp310-cp310-win_amd64.whl

  这样就完成安装,上面程序运行后:
在这里插入图片描述

四、写给程序员的

4. 1 函数库介绍

  常见的库前缀有 gl、glu、glut、aux、wgl、glx、agl 等。库前缀表示该函数属于 OpenGL 哪一个开发库。从函数名后面中还可以看出需要多少个参数以及参数的类型。I 代表 int 型,f 代表 float 型,d 代表 double 型,u 代表无符号整型。例如 glColor3f() 表示了该函数属于gl库,参数是三个浮点数。

  OpenGL 函数库相关的 API 有核心库(gl)、实用库(glu)、实用工具库(glut)、辅助库(aux)、窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。glx、agl、wgl 是针对不同窗口系统的函数。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。

4.2 库内函数的命名

OpenGL函数的命名格式如下:

<库前缀><根命令><可选的参数个数><可选的参数类型>

比如:glBufferData

  常见的库前缀有 gl、glu、glut、aux、wgl、glx、agl 等。库前缀表示该函数属于 OpenGL 哪一个开发库。从函数名后面中还可以看出需要多少个参数以及参数的类型。I 代表 int 型,f 代表 float 型,d 代表 double 型,u 代表无符号整型。例如 glColor3f() 表示了该函数属于gl库,参数是三个浮点数。

五、常见库的函数介绍

  OpenGL 函数库相关的 API 有核心库(gl)、实用库(glu)、实用工具库(glut)、辅助库(aux)、窗口库(glx、agl、wgl)和扩展函数库等。gl是核心,glu是对gl的部分封装。glut是为跨平台的OpenGL程序的工具包,比aux功能强大。glx、agl、wgl 是针对不同窗口系统的函数。扩展函数库是硬件厂商为实现硬件更新利用OpenGL的扩展机制开发的函数。本文仅对常用的四个库做简单介绍。

5.1 OpenGL 核心库 GL

  核心库包含有115个函数,函数名的前缀为gl。这部分函数用于常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。核心库中的函数主要可以分为以下几类函数:

  1. 绘制基本几何图元的函数:
glBegain()、glEnd()、glNormal*()、glVertex*()

  2. 矩阵操作、几何变换和投影变换的函数:
  如矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate*()、glRotate*()和glScale*(),投影变换函数glOrtho()、glFrustum()和视口变换函数glViewport()

  3.颜色、光照和材质的函数:
如设置颜色模式函数glColor*()、glIndex*(),设置光照效果的函数glLight*() 、glLightModel*()和设置材质效果函数glMaterial()

  4.显示列表函数:
主要有创建、结束、生成、删除和调用显示列表的函数glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists()

  5.纹理映射函数:
主要有一维纹理函数glTexImage1D()、二维纹理函数glTexImage2D()、设置纹理参数、纹理环境和纹理坐标的函数glTexParameter*()、glTexEnv*()和glTetCoord*()

  6.特殊效果函数:
融合函数glBlendFunc()、反走样函数glHint()和雾化效果glFog*()

  7.光栅化、象素操作函数:
如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel()

  8.选择与反馈函数:
主要有渲染模式glRenderMode()、选择缓冲区glSelectBuffer()和反馈缓冲区glFeedbackBuffer()

  9.曲线与曲面的绘制函数:
生成曲线或曲面的函数glMap*()、glMapGrid*(),求值器的函数glEvalCoord*() glEvalMesh*()

  10.状态设置与查询函数:
glGet*()、glEnable()、glGetError()

5.2 OpenGL 实用库 GLU

   包含有43个函数,函数名的前缀为glu。OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点、线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由glu.dll来负责解释执行。OpenGL中的核心库和实用库可以在所有的OpenGL平台上运行。主要包括了以下几种:

  1.辅助纹理贴图函数:
gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps()

  2.坐标转换和投影变换函数:
定义投影方式函数gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影视景体函数gluPickMatrix(),投影矩阵计算gluProject()和gluUnProject()

  3.多边形镶嵌工具:
gluNewTess()、gluDeleteTess()、gluTessCallback()、gluBeginPolygon()、gluTessVertex()、gluNextContour()、gluEndPolygon()

  4.二次曲面绘制工具:
主要有绘制球面、锥面、柱面、圆环面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric()

  5.非均匀有理B样条绘制工具:
主要用来定义和绘制Nurbs曲线和曲面,包括gluNewNurbsRenderer()、gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、gluNurbsProperty()

  6.错误反馈工具:
获取出错信息的字符串gluErrorString()

5.3 OpenGL 工具库 GLUT

   包含大约30多个函数,函数名前缀为glut。glut是不依赖于窗口平台的OpenGL工具包,由Mark KLilgrad在SGI编写(现在在Nvidia),目的是隐藏不同窗口平台API的复杂度。函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为完整的应用程序。这部分函数主要包括:

  1.窗口操作函数:
窗口初始化、窗口大小、窗口位置函数等 glutInit()、glutInitDisplayMode()、glutInitWindowSize()、glutInitWindowPosition()

  2.回调函数:
响应刷新消息、键盘消息、鼠标消息、定时器函数 GlutDisplayFunc()、glutPostRedisplay()、glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、glutMouseFunc()

  3.创建复杂的三维物体:
这些和aux库的函数功能相同

  4.菜单函数:
创建添加菜单的函数 GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu() 和 glutAttachMenu()

  5.程序运行函数:
glutMainLoop()

5.4 Windows 专用库 WGL

  针对windows平台的扩展,包含有16个函数,函数名前缀为wgl。这部分函数主要用于连接OpenGL和Windows ,以弥补OpenGL在文本方面的不足。 Windows专用库只能用于Windows环境中。这类函数主要包括以下几类:

   1. 绘图上下文相关函数:
wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC()、wglDeleteContent()

   2. 文字和文本处理函数:
wglUseFontBitmaps()、wglUseFontOutlines()

   3. 覆盖层、地层和主平面层处理函数:
wglCopyContext()、wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte()

   4. 其他函数:
wglShareLists()、wglGetProcAddress()

六、错误引发点和异常追踪

6.1 错误检查开关

  PyOpenGL通常使用“严格”的OpenGL操作,这更接近Python本身的操作,即将错误作为异常引发,而不是要求用户手动检查返回值和/或调用glCheckError。

  您可以在导入任何子模块之前通过在 OpenGL 包中设置模块级标志来禁用 PyOpenGL 的错误检查,如下所示:

import OpenGL
OpenGL.ERROR_CHECKING = False
from OpenGL.GL import *
from OpenGL.GLU import *

  这往往会导致代码速度大幅提高,因为与同一脚本的错误检查版本相比,发出的 OpenGL 调用数量大致减半。您通常希望在开发时启用错误检查,并且仅在生产/发布代码时将其关闭。
  但请注意,大多数 PyOpenGL 代码(包括 PyOpenGL 本身中的帮助程序代码)都是在错误引发异常的假设下编写的,因此您必须检查使用的所有代码以确保在适当的情况下调用 glGetError。

6.2 错误发源地

  • PyOpenGL 通常引发的异常有:
    GL.GLerror 除 WGL 之外的所有模块引发
    GLU.GLUerror 由 GLU 函数引发. GLU 也可引发 GL.GLerror
    WindowsError/SystemError 由 WGL引发
    TypeError/ValueError :例如错误数据类型问题
    GL.GLerror 是 GL.Error 的子类,具有大量有关调用包装过程的额外信息:

  • err – OpenGL 错误代码
    result – 操作的 OpenGL 结果代码
    baseOperation——被调用的基本 OpenGL 函数
    pyArgs——传递给函数的顶级参数集
    cArgs——从 pyArgs 扩展而来的 Python 级对象集
    cArguments——从 cArgs 转换而来的 C 级对象集
    description——错误的文本 OpenGL 描述(通常非常简洁,主要用于查看文档)

6.3 日志记录

  默认情况下,PyOpenGL 会将错误记录到 Python 日志模块。您可以通过在导入 OpenGL 子模块之前设置标志来禁用此功能:

import OpenGL
OpenGL.ERROR_LOGGING = False
from OpenGL.GL import *
...

这将为非开发代码提供性能改进。

相反,如果您发现代码崩溃并且需要跟踪 PyOpenGL 的操作,那么可以指示 PyOpenGL 跟踪对 OpenGL 的调用到日志记录模块:

import OpenGL
OpenGL.ERROR_LOGGING = True
from OpenGL.GL import *
...

这非常慢,但在调试过程中通常很有用。

这篇关于【pyopenGL编程手册- 01/20】pyopenGL安装和简要说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717902

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

hdu 2602 and poj 3624(01背包)

01背包的模板题。 hdu2602代码: #include<stdio.h>#include<string.h>const int MaxN = 1001;int max(int a, int b){return a > b ? a : b;}int w[MaxN];int v[MaxN];int dp[MaxN];int main(){int T;int N, V;s

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识