PyOpenGL是学习OpenGL编程的好选择吗?
我想开始学习OpenGL,但我不太想再学一种新的编程语言。我已经对Python很熟悉,而且很喜欢这个语言。我只是想知道,Python和OpenGL的普通接口差距有多大?我能否比较轻松地跟着教程和书籍学习,而不会遇到太多麻烦?
我知道C++的性能更好,但如果只是为了学习,使用PyOpenGL会有什么问题吗?
2 个回答
PyOpenGL
我觉得这不是个好选择。在我看来,用C/C++来玩OpenGL代码会简单很多——可以从一个简单的应用开始,然后添加着色器,再加一些几何图形的功能,制作纹理或几何生成器,通过CSG构建场景等等。你知道的,就是为了好玩,随便动动代码,实验一下,顺便学点东西。老实说,我真的看不出自己会用Python来做这些事情。当然,用Python做OpenGL编程是可能的,但我觉得没有必要。而且,很多OpenGL函数需要用到内存指针作为参数,虽然可能有一些类(或者好几种替代方案)可以处理这种情况,但我觉得在C/C++中用传统的方法来做更简单,尤其是考虑到Python代码需要用很多包装器来把向量或数组传递给OpenGL函数。这看起来只是让事情变得更复杂,而没有真正的理由去这么做。而且,使用“原生”OpenGL时,性能也会明显下降。
另外,如果你打算做游戏,很可能需要使用C++或其他一些“非Python”的语言。
附言:我做过不少OpenGL编程,也有很多DirectX编程的经验,但我专注于C++,只在某些算法测试、工具和脚本中使用Python。
虽然我自己在OpenGL编程方面经验不多,但我觉得对于学习来说,PyOpenGL是个不错的选择。主要原因是,PyOpenGL就像其他OpenGL的封装库一样,实际上只是对OpenGL API的一个简单封装。
PyOpenGL的一个大好处是,在C语言中,你需要特别注意调用正确的glVertex3{dfiX}
命令,而在Python中,你只需写glVertex3(x,y,z)
,不需要担心传入的参数类型。这听起来可能没什么大不了,但实际上,使用Python的鸭子类型(duck-typing)要比过于关注静态类型简单得多。
几乎所有的OpenGL方法都已经封装成了Python的方法,所以虽然你是在用Python编写代码,但你使用的算法和方法调用和在其他语言中写OpenGL是完全一样的。不过,由于你是在用Python写代码,你就不太容易犯一些“傻乎乎”的错误,比如指针使用不当、内存管理等。如果你用C或C++来学习API,这些问题可能会浪费你很多时间。