我正在关注一个教程并且与运行教程的人员有相同的代码,并且已经下载了相同的软件包等,但是我收到了错误而他却没有。任何帮助解释以下代码中的错误将不胜感激。我应该补充一点,我在这里看到了类似的线程,但到目前为止还没有解决方案有帮助。作为参考,它返回错误
Fatal Python error: (pygame parachute) Segmentation Fault
Current thread 0x00000ba4 (most recent call first):
File "C:/Users/00101010/PycharmProjects/3DPygame/textcompare.py", line 44 in main
File "C:/Users/00101010/PycharmProjects/3DPygame/textcompare.py", line 63 in <module>
Process finished with exit code 3
以下是代码。
import pygame
from pygame import *
from OpenGL.GL import *
from OpenGL.GLU import *
import sys
vertices = (
(1, -1, -1),
(1, 1, -1),
(-1, 1, -1),
(-1, -1, -1),
(1, -1, 1),
(1, 1, 1),
(-1, -1, 1),
(-1, 1, 1)
)
edges = (
(0, 1),
(0, 3),
(0, 4),
(2, 1),
(2, 3),
(2, 7),
(6, 3),
(6, 4),
(6, 7),
(5, 1),
(5, 4),
(5, 7)
)
def Cube():
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()
def main():
pygame.init()
displaysize = (800, 600)
pygame.display.set_mode(displaysize, DOUBLEBUF | OPENGL)
gluPerspective(45, (displaysize[0] / displaysize[1]), 0.1, 50.0)
glTranslatef(0.0, 0.0, -5)
while True:
for i in pygame.event.get():
if i.type == pygame.QUIT:
pygame.quit()
sys.exit()
glRotatef(1, 3, 1, 1)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
Cube()
pygame.display.flip()
pygame.time.wait(10)
main()
修改
sys.version
的输出为3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
。
运行仅使用PyOpenGL的示例导致init中第35行出现此错误(脚本中的第76行):
OpenGL.error.GLError: GLError( err = 1282, description = b'invalid operation', baseOperation = glViewport, cArguments = (0, 0, 1366, 768) )
错误仍在继续:
freeglut (C:/Users/OOIOIOIO/PycharmProjects/OpenGLstuff/OpenGLtest.py): fgInitGL2: fghGenBuffers is NULL
这是一款相当古老的toshiba卫星c660笔记本电脑,从2010年左右开始配备英特尔奔腾CPU P6100并且没有专用显卡。
答案 0 :(得分:0)
致命的Python错误:( pygame降落伞)分段错误
pygame.display.set_mode()失败。
这听起来很奇怪,因为pygame.display.set_mode()
不应该像那样失败。如果不支持指定的显示模式,则pygame将回退并使用其他内容。但是从来没有像这样直接失败。
优点是如果您的显示模式不可用,pygame将模拟您要求的显示模式。
因此,既然您正在处理段错误,那么您似乎正在处理一些不受支持且可能过时且过时的事情。
我已将您的代码重写为仅使用PyOpenGL。 您可以验证在没有参与pygame时是否能够运行它吗?
import sys
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
vertices = [
(1, -1, -1),
(1, 1, -1),
(-1, 1, -1),
(-1, -1, -1),
(1, -1, 1),
(1, 1, 1),
(-1, -1, 1),
(-1, 1, 1)
]
edges = [
(0, 1),
(0, 3),
(0, 4),
(2, 1),
(2, 3),
(2, 7),
(6, 3),
(6, 4),
(6, 7),
(5, 1),
(5, 4),
(5, 7)
]
def init(width, height):
glViewport(0, 0, width, height)
glClearColor(0.0, 0.0, 0.0, 1.0)
glMatrixMode(GL_PROJECTION)
gluPerspective(45.0, (width / height), 0.1, 50.0)
glMatrixMode(GL_MODELVIEW)
glTranslatef(0.0, 0.0, -5.0)
def display():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glRotatef(1.0, 3.0, 1.0, 1.0)
glBegin(GL_LINES)
for edge in edges:
for vertex in edge:
glVertex3fv(vertices[vertex])
glEnd()
glutSwapBuffers()
def resize(width, height):
glViewport(0, 0, width, height)
if __name__ == "__main__":
glutInit(sys.argv)
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH)
glutInitWindowSize(640, 480)
glutInitWindowPosition(200, 200)
glutCreateWindow(b"OpenGL")
glutDisplayFunc(display)
glutIdleFunc(display)
glutReshapeFunc(resize)
init(glutGet(GLUT_SCREEN_WIDTH), glutGet(GLUT_SCREEN_HEIGHT))
glutMainLoop()
请注意,如果您收到与此类似的错误:
OpenGL.error.NullFunctionError:尝试调用未定义的函数glutInit,在调用之前检查bool(glutInit)
然后呢,因为你没有过剩的freeglut(你可以download precompiled binaries here)。
请注意,由于sys.version
会返回3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
,因此比抱歉更安全并下载 freeglut 3.0.0 MSVC Package 。由于您使用的是64位,因此请确保使用64位版本的freeglut.dll
(zip包含两个版本)。将freeglut.dll
放在Python脚本旁边的项目目录中。
它返回了这个错误,在init中的第35行,在模块中的第76行
OpenGL.error.GLError: GLError( err = 1282, description = b'invalid operation', baseOperation = glViewport, cArguments = (0, 0, 1366, 768) )
此错误仍在继续
freeglut (C:/Users/OOIOIOIO/PycharmProjects/OpenGLstuff/OpenGLtest.py): fgInitGL2: fghGenBuffers is NULL
那不应该发生。看起来不太可能显卡不支持任何形式的OpenGL。
但考虑到它与glViewport()
(自1.0以来一直是核心)有问题。然后听起来就是这种情况。尝试运行OpenGL Extensions Viewer并查看其内容。
Intel Pentium CPU P6100
看起来你的CPU根本不支持OpenGL。 The specification doesn't even mention OpenGL at all。与此说明Intel Core i7-7Y75(作为随机例子)。