Python 3.x 用OpenGl和Python3绘制STL
我正在尝试将一个程序从Python2移植到Python3。蟒蛇的一切都很好 OpenGl在尝试绘制对象时返回错误。以下是函数:Python 3.x 用OpenGl和Python3绘制STL,python-3.x,opengl,Python 3.x,Opengl,我正在尝试将一个程序从Python2移植到Python3。蟒蛇的一切都很好 OpenGl在尝试绘制对象时返回错误。以下是函数: def draw_facets(self): glPushMatrix() # Ligthing, color and Material Stuff ... ### VBO stuff glBegin(GL_LINES)
def draw_facets(self):
glPushMatrix()
# Ligthing, color and Material Stuff
...
### VBO stuff
glBegin(GL_LINES)
# THE ERROR COMES FROM THAT POINT
self.vertex_buffer.bind()
glVertexPointer(3, GL_FLOAT, 0, None)
self.normal_buffer.bind()
glNormalPointer(GL_FLOAT, 0, None)
glEnableClientState(GL_VERTEX_ARRAY)
glEnableClientState(GL_NORMAL_ARRAY)
glDrawArrays(GL_TRIANGLES, 0, len(self.vertices))
glDisableClientState(GL_NORMAL_ARRAY)
glDisableClientState(GL_VERTEX_ARRAY)
self.normal_buffer.unbind()
self.vertex_buffer.unbind()
glEnd()
glPopMatrix()
Python返回以下错误:
File "../libtatlin/actors.py", line 553, in draw_facets
glVertexPointer(3, GL_FLOAT, 0, None)
File "/usr/local/lib/python3.8/dist-packages/PyOpenGL-3.1.5-py3.8.egg/OpenGL/latebind.py", line 43, in __call__
return self._finalCall( *args, **named )
File "/usr/local/lib/python3.8/dist-packages/PyOpenGL-3.1.5-py3.8.egg/OpenGL/wrapper.py", line 818, in wrapperCall
storeValues(
File "/usr/local/lib/python3.8/dist-packages/PyOpenGL-3.1.5-py3.8.egg/OpenGL/arrays/arrayhelpers.py", line 156, in __call__
contextdata.setValue( self.constant, pyArgs[self.pointerIndex] )
File "/usr/local/lib/python3.8/dist-packages/PyOpenGL-3.1.5-py3.8.egg/OpenGL/contextdata.py", line 58, in setValue
context = getContext( context )
File "/usr/local/lib/python3.8/dist-packages/PyOpenGL-3.1.5-py3.8.egg/OpenGL/contextdata.py", line 40, in getContext
raise error.Error(
OpenGL.error.Error: Attempt to retrieve context when no valid context
欢迎提供任何帮助如何创建OpenGL上下文(窗口)?必须在第一条OpenGL指令之前创建OpenGL上下文。为什么要尝试将
glBegin
/glEnd
序列与glDrawArrays
混合?如何创建上下文?“尝试混合使用glBegin/glEnd”是什么意思?创建OpenGL
上下文有很多不同的方法。如果你编辑你的问题来提供答案,你可能会得到更多的帮助。在OpenGL中编程就像在C中编程:这是非常低级的,很容易让你自食其果,但如果你努力工作,你可以取得惊人的成就。如果您不了解什么是上下文,或者混合使用glBegin/glEnd和glDrawArrays有什么问题,您需要学习OpenGL教程,例如OpenGL超级圣经书。我建议看看ModernGL,这是一个Python包(可通过PyPi/GitHub获得),用于创建简单的3D图形应用程序。