我希望对openGL和Python做一些修补工作,但还没有找到使用PyOpenGl与pyglet的好理由
你会推荐哪一个?为什么?
发布于 2008-11-11 04:03:04
正如托尼所说,这真的要取决于你的目标。如果您正在“修修补补”,试图了解OpenGL或3D渲染的一般知识,那么我将省去所有的寒酸,开始使用PyOpenGL,这与使用Python进行“原始”3D编程是一样接近的。
另一方面,如果您正在通过模拟游戏或多媒体应用程序的方式“修修补补”,或者试图学习一般的编程实践,那么Pyglet将通过提供输入事件、声音、文本/广告牌等的挂钩,为您节省大量的前期开发时间。通常,这种前期投资会阻止人们完成他们的项目,因此为您完成它是不可忽视的事情。(为了避免重复发明轮子,这也是非常Pythonic式的。)
如果你想做一些繁重的工作(这通常不属于我对“修补”的定义,但如果你正在修补3D引擎的设计,可能就不会),那么你可能会想看看Python-Ogre,它包装了非常全功能和健壮的OGRE 3D图形引擎。
发布于 2010-11-22 22:21:04
从pyglet开始。它包含了最好的高级应用程序接口,其中包含了您需要的所有入门知识,从打开窗口到使用其友好而强大的Sprite和Batch类绘制精灵和OpenGL原语。
稍后,您可能还想编写自己的低级代码,直接调用glDrawArrays等OpenGL函数。您可以使用pyglet的OpenGL绑定或PyOpenGL来实现这一点。好消息是,无论您使用哪种方法,都可以将这样的调用插入到现有pyglet应用程序的中间,它们将“直接工作”。将你的代码从Pyglet转换到PyOpenGL是相当容易的,所以这不是一个你需要预先考虑的决定。两者之间的权衡是:
PyOpenGL的绑定使OpenGL界面更加友好和pythonic风格。例如,您可以传递许多不同形式的顶点数组,ctype数组、numpy数组、普通列表等,PyOpenGL会将它们转换为OpenGL可以使用的东西。这样的事情让PyOpenGL变得非常简单和方便。
pyglet的OpenGL绑定是自动生成的,并且不像PyOpenGL那样易于使用。例如,有时您必须手动创建ctypes对象,以便将“C指针”类型的参数传递给OpenGL。这可能很麻烦。不过,积极的一面是pyglet的绑定速度要快得多。
这意味着有一个最佳的中间地带:使用pyglet进行窗口、鼠标事件、声音等。然后,当您想要进行直接的OpenGL函数调用时,使用PyOpenGL的友好API。然后,在优化时,只需将内部呈现循环中的一小部分性能关键型PyOpenGL调用替换为pyglet等效项。对我来说,这让我的帧率提高了2到4倍,PyOpenGL对我90%的代码都很方便。
发布于 2016-07-07 02:31:06
试试ModernGL。
pip install ModernGLpyglet.gl.glClearColor)pip install moderngl-window在ModernGL中,可以使用单个调用创建简单的着色器程序:
prog = ctx.program(
vertex_shader='''
#version 330
in vec2 in_vert;
void main() {
gl_Position = vec4(in_vert, 0.0, 1.0);
}
''',
fragment_shader='''
#version 330
out vec4 f_color;
void main() {
f_color = vec4(0.3, 0.5, 1.0, 1.0);
}
''',
)使用ModernGL,您可以完全控制OpenGL应用编程接口。
https://stackoverflow.com/questions/279912
复制相似问题