返回

PyOpenGL绘制正方形时解决OpenGL.error.NullFunctionError错误的指南

python

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 的流行替代方案。它们提供了不同的特性和功能集。