PyOpenGL的环境配置心得

我想用PyQt5做一个3维显示的界面,有如下方案:

1,使用PyQt5的opengl接口;

2,仅使用qt做界面以及创建opengl上下文(QOpenGLWdiget),然后使用pyopengl调用gl的接口;

最初我选择方案1,发现pyqt5对opengl的支持不及C++版的qt,例如C++的QT可以使用QOpenGLFunctions_3_3_Core,但是pyqt5就没有,pyqt5只有_QOpenGLFunctions_2_0,_QOpenGLFunctions_2_1,_QOpenGLFunctions_4_1_Core可以使用,我好不容易才找到利用qt使用4.1 core版本gl函数的方法:

        version_profile = QOpenGLVersionProfile()
        version_profile.setVersion(4, 1)
        version_profile.setProfile(QSurfaceFormat.CoreProfile)
        self.glx = self.context().versionFunctions(version_profile)
        self.glx.initializeOpenGLFunctions()

但是却有下面的错误:

 'QOpenGLFunctions_4_1_Core' object has no attribute 'glGenVertexArrays'

于是放弃了使用qt的gl函数,决定使用pyopengl来调用opengl。

我使用的是anaconda(python3.8.5),用conda来安装pyopengl。

但是,PyOpenGL_accelerate一定要用pip来安装,否则会报:

AttributeError: module 'numpy' has no attribute 'float128'错误

使用pyopengl的时候也要注意,有些gl接口与C语言版的不同!

特别是要注意,空指针(void*)(0)不能用0来代替!要用None或者c_void_p(0)或者ctypes.cast(0, ctypes.c_void_p)如:

 gl.glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeOfFloat, None);

最后一个参数,要填None,不能填0

===================================================================

2022.03.28 更新:

今天在新电脑上配环境,pyopengl使用conda install pyopengl来安装,pyopengl-accelerate使用pip来安装,安装的版本是:

pyopengl                  3.1.1a1          py38haa95532_0
pyopengl-accelerate       3.1.6                    pypi_0    pypi

numpy使用conda install numpy来安装,安装的版本是:

numpy                     1.21.5           py38ha4e8547_0
numpy-base                1.21.5           py38hc2deb75_0

结果报下面的错误:

 in initializeGL
    compileShader(vertexShaderSource, gl.GL_VERTEX_SHADER),
  File "D:\ProgramData\anaconda3\envs\pyqt\lib\site-packages\OpenGL\GL\shaders.py", line 226, in compileShader
    result = glGetShaderiv( shader, GL_COMPILE_STATUS )
  File "src/latebind.pyx", line 39, in OpenGL_accelerate.latebind.LateBind.__call__
  File "src/latebind.pyx", line 51, in OpenGL_accelerate.latebind.Curry.__call__
  File "D:\ProgramData\anaconda3\envs\pyqt\lib\site-packages\OpenGL\GL\VERSION\GL_2_0.py", line 268, in glGetShaderiv
    status = arrays.GLintArray.zeros( (1,))
  File "src/arraydatatype.pyx", line 219, in OpenGL_accelerate.arraydatatype.ArrayDatatype.zeros
  File "src/arraydatatype.pyx", line 224, in OpenGL_accelerate.arraydatatype.ArrayDatatype.c_zeros
  File "src/arraydatatype.pyx", line 69, in OpenGL_accelerate.arraydatatype.HandlerRegistry.c_get_output_handler
  File "src/arraydatatype.pyx", line 80, in OpenGL_accelerate.arraydatatype.HandlerRegistry.c_handler_by_plugin_name
  File "D:\ProgramData\anaconda3\envs\pyqt\lib\site-packages\OpenGL\plugins.py", line 16, in load
    return importByName( self.import_path )
  File "D:\ProgramData\anaconda3\envs\pyqt\lib\site-packages\OpenGL\plugins.py", line 38, in importByName
    module = __import__( ".".join(moduleName), {}, {}, moduleName)
  File "D:\ProgramData\anaconda3\envs\pyqt\lib\site-packages\OpenGL\arrays\numpymodule.py", line 27, in <module>
    from OpenGL_accelerate.numpy_formathandler import NumpyHandler
  File "src/numpy_formathandler.pyx", line 1, in init OpenGL_accelerate.numpy_formathandler
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject

对比了一下旧电脑里的配置,把pyopengl-accelerate的版本换成3.1.5就好了:pip install PyOpenGL_accelerate==3.1.5 

<think>好的,用户想要在Python中配置OpenGL环境。我需要先回忆一下相关的知识,然后根据提供的引用资料来整理步骤。首先,用户的问题是关于配置环境的,所以需要分步骤说明安装过程。 根据引用内容,PyOpenGL是必须安装的库,可以通过pip安装。引用1和引用2都提到使用pip安装PyOpenGL和加速模块,还有可能需要glfw和glm等其他包。不过用户可能主要关心的是OpenGL的基本配置,所以重点放在PyOpenGL的安装上。 另外,引用3提到可能有32位和64位不匹配的问题,用户可能需要下载特定版本的PyOpenGL。但一般情况下,使用pip安装应该可以自动处理,除非遇到问题才需要手动下载。所以应该先建议用pip安装,如果遇到问题再手动解决。 步骤大概可以分为:安装PyOpenGL,验证安装,处理常见问题。此外,可能需要安装其他依赖库如GLFW或PyGame来创建窗口上下文,因为OpenGL本身不处理窗口管理。 需要确保用户按照正确的顺序操作,比如先安装PyOpenGL,再安装其他辅助库。同时,示例代码可以帮助用户测试环境是否配置成功。如果用户遇到问题,比如导入错误,可能需要检查位数匹配或者依赖项是否安装。 最后,生成相关问题时要围绕环境配置的扩展问题,比如常见错误处理、其他库的整合等。</think>以下是在Python中配置OpenGL环境的详细步骤说明: ### Python OpenGL环境配置教程 1. **安装PyOpenGL核心库** ```bash pip install PyOpenGL PyOpenGL_accelerate ``` 这是PythonOpenGL接口库,提供完整的OpenGL API绑定[^1][^2] 2. **安装窗口工具包(二选一)** - 使用GLFW: ```bash pip install glfw ``` - 使用PyGame: ```bash pip install pygame ``` 3. **安装数学工具库(可选)** ```bash pip install glm ``` GLM提供OpenGL兼容的数学运算支持 4. **验证安装** ```python from OpenGL.GL import * import glfw # 初始化窗口测试 if not glfw.init(): raise Exception("GLFW初始化失败") window = glfw.create_window(640, 480, "OpenGL环境测试", None, None) glfw.make_context_current(window) print("OpenGL版本:", glGetString(GL_VERSION)) ``` 5. **常见问题处理** - 若出现`ImportError`,尝试手动下载对应版本的PyOpenGL: ```bash pip install 下载路径/PyOpenGL-3.1.6-cp39-cp39-win_amd64.whl ``` 注意Python版本与系统架构的匹配[^3] ### 环境验证示例代码 ```python import glfw from OpenGL.GL import * def main(): if not glfw.init(): return window = glfw.create_window(800, 600, "OpenGL窗口", None, None) if not window: glfw.terminate() return glfw.make_context_current(window) while not glfw.window_should_close(window): glClear(GL_COLOR_BUFFER_BIT) glfw.swap_buffers(window) glfw.poll_events() glfw.terminate() if __name__ == "__main__": main() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值