pygame模拟错误“ 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上一样在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上运行它显然存在问题,但是在Linux上运行良好。 让我知道重新安装是否有帮助,如果让我的代码运行,我会告诉你!

更新:在与代码编写者交谈之后,他删除了所有GLUT依赖项,现在看来一切正常。只需从github链接重新下载代码:

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

现在应该可以正常工作了!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...