使用gluSph渲染有纹理的太阳时发生PyOpenGL错误

2024-05-15 12:11:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的计算机图形学项目写一个模拟太阳系的程序。我使用Python作为编程语言,Pygame(用于控制显示、鼠标和键盘事件)、PyOpenGL(用于三维建模和纹理)和PIL(Python图像库,用于加载OpenGL纹理的图像)。该应用程序的主要目的是能够通过键盘在太阳系中飞行(一种免费的摄像游戏)。我用了第一个OpenGL.py“开始”的方法 游戏开发用Python和Pygame从新手到专业”一书,由Will McGugan来控制摄像机。我的问题是,当我运行该程序(仅渲染场景中心的纹理太阳)时,它工作得非常好,直到您移动到离对象太近或太远的位置(旋转到目前为止没有显示出任何问题)。错误输出为:

C:\Python27\python.exe E:/Nestor/RESPALDO/NESTOR/DATA/7mo_Semestre/GxC/Proyecto/star-trip/main.py
Traceback (most recent call last):
  File "E:/Nestor/RESPALDO/NESTOR/DATA/7mo_Semestre/GxC/Proyecto/star-trip/main.py", line 235, in <module>
main()
  File "E:/Nestor/RESPALDO/NESTOR/DATA/7mo_Semestre/GxC/Proyecto/star-trip/main.py", line 225, in main
        planets[0].render()
  File "E:\Nestor\RESPALDO\NESTOR\DATA\7mo_Semestre\GxC\Proyecto\star-trip\spaceobjects.py", line 46, in render
    baseline.loadTexture(self.texture)
  File "E:\Nestor\RESPALDO\NESTOR\DATA\7mo_Semestre\GxC\Proyecto\star-trip\baseline.py", line 158, in loadTexture
    glTexImage2D(GL_TEXTURE_2D, 0, 3, ix, iy, 0, GL_RGBA, GL_UNSIGNED_BYTE, data)
  File "C:\Python27\lib\site-packages\pyopengl-3.1.0-py2.7.egg\OpenGL\latebind.py", line 41, in __call__
    return self._finalCall( *args, **named )
  File "C:\Python27\lib\site-packages\pyopengl-3.1.0-py2.7.egg\OpenGL\wrapper.py",   line 875, in wrapperCall
    raise err
OpenGL.error.GLError

乍一看,我在应用太阳纹理时好像做错了什么,所以下面是我用来做的代码:

^{pr2}$

我也得到了“内存不足”的错误,我不太明白,所以任何优化建议将不胜感激。在


Tags: inpydatamainlinefileopenglstar
1条回答
网友
1楼 · 发布于 2024-05-15 12:11:58

你在反复打loadTexture吗?听起来有点像,虽然从代码中很难判断,但是异常在启动后很好地发生(例如,当您靠近太阳时)这一事实表明它在呈现循环中被调用。在

如果你调用它的每一个渲染循环,那么你将分配大量相同的texturemaps(并构建大量mipmap),这将很快消耗图形内存。确保只调用一次loadtextures,保存返回的纹理ID,然后使用这些ID调用glBind2D,而不是一遍又一遍地调用loadtexture。在

相关问题 更多 >