pygame 模拟错误 "OpenGL.error.NullFunctionError"

Error in pygame simulation "OpenGL.error.NullFunctionError"

我正在尝试 运行 python 中的这段代码,我已经有了 PyOpenGL 库和 pygame 库。模拟证明中间轴定理

#!/usr/bin/env python
# Intermediate Axis Theorem Simulator
# Author: Franco Barpp Gomes (https://github.com/Hyodar)

# -*- coding: utf-8 -*-

# Imported modules
# ----------------------------------------------------------------------------

import pygame.locals as pygl
import pygame

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *

from utils.constants import WINDOW_SIZE
from utils.constants import NUM_FRAMES

from utils.classes.Screen import Screen
from utils.classes.World import World
from utils.classes.Tbar import Tbar

# ----------------------------------------------------------------------------
# Main
# ----------------------------------------------------------------------------


def main():

    print('[*] Creating pygame display...')
    pygame.init()
    display = pygame.display.set_mode(WINDOW_SIZE, pygl.DOUBLEBUF | pygl.OPENGL)

    world = World()
    tbar = Tbar()
    world.add_object(tbar)

    screen = Screen(display=display, tbar=tbar)

    print('[*] Initializing scene...')
    world.init_scene()

    frame = 0
    paused = False

    print('[*] Starting pygame loop...')
    while frame < NUM_FRAMES:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                print('[*] Quit event detected. Stopping pygame...')
                pygame.quit()
                exit(0)
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_SPACE:
                    paused = not paused
                    if paused:
                        screen.show_paused_message()

        if not paused:
            world.clear()
            world.render()
            screen.render()

            frame += 1

            pygame.display.flip()
            pygame.time.wait(10)

    print('[*] Simulation finished successfully')


if __name__ == '__main__':
    main()

但是,现在我得到这个错误,

[*] Creating pygame display...
[*] Initializing scene...
2020-08-13 20:41:59.869 python3[22970:759075] GLUT Warning: glutInit being called a second time.
[*] Starting pygame loop...
Traceback (most recent call last):
  File "src/main.py", line 76, in <module>
    main()
  File "src/main.py", line 64, in main
    world.render()
  File "/Users/silviaar/python_projects/intermediate-axis-theorem-master/src/utils/classes/World.py", line 71, in render
    obj.render()
  File "/Users/silviaar/python_projects/intermediate-axis-theorem-master/src/utils/classes/Tbar.py", line 86, in render
    self.handle.render(self.cm, self.handle_relpos)
  File "/Users/silviaar/python_projects/intermediate-axis-theorem-master/src/utils/classes/Cylinder.py", line 56, in render
glutWireCylinder(self.radius, self.height, self.slices, self.stacks)
  File "/Users/silviaar/anaconda3/lib/python3.6/site-packages/OpenGL/platform/baseplatform.py", line 407, in __call__
    self.__name__, self.__name__,
OpenGL.error.NullFunctionError: Attempt to call an undefined function glutWireCylinder, check for bool(glutWireCylinder) before calli
ng

不确定出了什么问题,首先问题是我没有安装 pygame,然后是 OpenGL,但现在我收到此错误并且找不到函数“glutWireCylinder” 你能帮帮我吗?

我正在尝试 运行 相同的代码,到目前为止,我已经 运行 解决了 FreeGLUT 的一些问题。如果您像我一样在 Windows 上尝试 运行 它,那么您可能 运行 遇到了与我遇到的相同的初始问题。根据我的阅读,PyOpenGL 包缺少 FreeGLUT 中的一些东西 Windows。我找到的修复方法是卸载我拥有的 OpenGL 包,然后在此处 pip 安装这个自定义包:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl

它拥有您需要的所有额外东西。另一种方法是追踪 dll 文件并将它们放在正确的目录中,但重新安装更容易,而且似乎工作正常。希望这就是您遇到的问题! 目前,当我 运行 它时,我收到此错误:

glutWireCylinder(self.radius, self.height, self.slices, self.stacks)
OSError: exception: access violation reading 0x0000001C

我已经联系了 github 上的代码作者,他说 运行 在 Windows 上显然存在问题,但它在 [=34] 上运行良好=]. 如果重新安装有帮助,请告诉我,如果我得到代码,我会告诉你 运行ning!

更新:在与代码作者交谈后,他删除了所有 GLUT 依赖项,现在它似乎运行良好。只是 re-download 来自 github link 的代码:

https://github.com/Hyodar/intermediate-axis-theorem

现在应该可以正常使用了!