我尝试在我的Mac(10.11.5)上的PyOpenGL上运行glgenvertexarray。它找不到它。在
问题似乎出在我的Mac(?)支持的OpenGL版本上。我曾试图研究这个问题,但似乎文档是为历史书呆子或琐事爱好者编写的,我都不是。在
当我尝试这样做时:
print("OpenGL: " + str(glGetString(GL_VERSION)))
print('glGenVertexArrays Available %s' % bool(glGenVertexArrays))
vao = glGenVertexArrays(1)
我明白了:
OpenGL: 2.1 NVIDIA-10.10.10 310.42.25f01
glGenVertexArrays Available False
Traceback (most recent call last): File "_ctypes/callbacks.c", line 315, in 'calling callback function' File "draw.py", line 99, in doRedraw mesh.draw() File "/Users/carlos/vc/SimpleRender/Mesh.py", line 170, in draw vao = glGenVertexArrays(1) File "/Users/carlos/.virtualenvs/janus/lib/python2.7/site-packages/OpenGL/platform/baseplatform.py", line 407, in call self.name, self.name, OpenGL.error.NullFunctionError: Attempt to call an undefined function glGenVertexArrays, check for bool(glGenVertexArrays) before calling
所有在线的人都看到here,或者{a2}似乎运行glgenvertexarray没有问题。This guy似乎遇到了我同样的问题,但是向他建议的解决方案(添加GLUT_PROFILE_3_2_内核在我的PyOpenGL中没有定义)
我做错什么了?在
编辑:
我试过pyglet和PyQt5(在python3下运行),结果总是因为缺少了Glgenvertexarays。在
似乎(网上有很多关于这方面的错误信息)我需要做的是建立核心配置文件。我该怎么做?如果我放弃Python需求,会不会更简单?考虑到我不是傻瓜,我已经解决了我的问题之前,张贴在这里。在
我有:
我在裸机上运行,不是虚拟化,没有虚拟机,没有docker。在
glxinfo的输出为:
^{pr2}$
首先,我建议您每次使用Opengl函数时,检查需要哪个Opengl版本才能正常运行它,例如,如果我们看一下glGenVertexArrays,我们会发现您需要Opengl>;=3.0。现在,在使用glGetString(GL_version)时获得2.1版本的原因可能是因为您有一个非常旧的卡(不太可能),或者因为您没有启用Opengl核心配置文件。一旦你这样做,你应该看到正确的Opengl版本和运行的现代Opengl函数,如你所要求的。在
在某些情况下,比如使用pyqt opengl小部件,上下文设置将在幕后为您完成。。。或者,正如您所说,如果您使用的是glut,则会有一个特性来实现这一点。在
一种方法是手动启用核心配置文件,如果你是opengl的初学者,这可能会很整洁,如果你只是想使用opengl而没有太多的混乱,我建议在pyopengl上使用一些东西,比如pyqt、pyglet、glut、pygame。。。有大量的包装,你不会发现自己在做手动设置。下面是一个简单的例子,它使用了PyQt5(
pip install PyQt5
)附带的QGlWidget,它应该可以开箱即用:这只是一个简单的测试,它向您展示了上下文准备就绪和未准备就绪时会发生的情况,它还为您提供了一些有关vbo+vao+着色器用法的额外信息,它应该会给您提供类似于以下内容的内容:
这应该可以让你开始。。。正如我所说,opengl上有大量的包装器,如果不是pyglet,pygame是python社区中非常著名的一个,它有很多很酷的特性。在
相关问题 更多 >
编程相关推荐