问题描述
我正在尝试在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
现在应该可以正常工作了!