PyOpenGL绘制正方形时解决OpenGL.error.NullFunctionError错误的指南
2024-03-14 18:26:59
PyOpenGL 中绘制正方形:告别 OpenGL.error.NullFunctionError
在使用 PyOpenGL 绘制图形时,你可能会遇到一个恼人的错误:“OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInitWindowPosition, check for bool(glutInitWindowPosition) before calling”。
问题根源
此错误表明你正在尝试调用一个不存在的函数。glutInitWindowPosition 函数是 GLUT(图形用户界面工具包)中定义的,而 PyOpenGL 不支持 GLUT。
解决方案
要解决此错误,请按照以下步骤操作:
- 删除 glutInitWindowPosition 调用: 由于此函数在 PyOpenGL 中不可用,因此请将其从脚本中删除。
- 验证 PyOpenGL 安装: 确保已正确安装 PyOpenGL 轮子,并且其版本与你的 Python 解释器兼容。
- 安装 Visual C++ 14.0: Visual C++ 14.0 构建工具对于在 Windows 上使用 PyOpenGL 至关重要。请检查它们是否已安装,如果没有,请下载并安装它们。
- 重新启动 Python 解释器: 有时,重新启动解释器可以解决此类问题。
绘制正方形
解决错误后,你可以继续绘制一个正方形:
导入库
from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
设置窗口
w, h = 500, 500
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(w, h)
创建窗口
window = glutCreateWindow("OpenGL 绘制正方形")
定义绘图函数
def square():
glBegin(GL_QUADS)
glVertex2f(100, 100)
glVertex2f(200, 100)
glVertex2f(200, 200)
glVertex2f(100, 200)
glEnd()
定义迭代函数
def iterate():
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, w, 0.0, h, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
定义显示函数
def showScreen():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
iterate()
glColor3f(1.0, 0.0, 3.0)
square()
glutSwapBuffers()
启动 GLUT 循环
glutMainLoop()
常见问题解答
1. 为什么我仍然收到错误,即使我删除了 glutInitWindowPosition 调用?
检查你是否已正确安装了 Visual C++ 14.0 构建工具,并确保 PyOpenGL 版本与你的 Python 解释器兼容。
2. 我尝试使用 glutInitWindowPosition,但它仍然不起作用。
PyOpenGL 中不支持 glutInitWindowPosition 函数。请使用其他方法来设置窗口位置。
3. 如何在不同的操作系统上运行 PyOpenGL?
PyOpenGL 支持 Windows、MacOS 和 Linux。对于每个操作系统,安装说明和依赖关系可能会略有不同。
4. 如何优化 PyOpenGL 应用程序的性能?
使用显示列表、纹理映射和批处理等技术可以提高 PyOpenGL 应用程序的性能。
5. PyOpenGL 有替代方案吗?
Pyglet 和 Pygame 是 PyOpenGL 的流行替代方案。它们提供了不同的特性和功能集。