pyopengl:可以替代C++吗?
我正在开始一门计算机图形学的课程,需要选择一种编程语言。
我可以选择C++或者Python。我对C++没问题,但Python还在学习中。所以我在考虑使用Python,配合pyopengl来处理图形部分。
不过,我听说性能可能会有问题。
Python和pyopengl的性能是否足够成熟,能和C++抗衡呢?
我知道这个问题有点难,但我想听听你们的想法和使用pyopengl的经验。
5 个回答
Python是一个很不错的选择。因为所有的OpenGL编程都是把数据上传到显卡的内存中,然后用OpenGL来处理这些数据,所以在Python中的速度限制并不是问题。此外,Python让一些在C++中比较复杂的事情变得简单,比如打开文件、处理图片和声音等等。
至于上面提到的实现八叉树的人,实际上你可以使用numpy,它是用C语言写的,来实现这个功能(另外要确保你使用的是线性内存,就像二叉树那样,而不是指向链接结构中对象的指针)。
这是我个人的经历:
当我第一次听说PyOpenGL时,我感到非常兴奋。在我最喜欢的编程语言中使用OpenGL?太棒了!于是我开始自学3D图形编程。
我看了几个教程和书籍,比如NeHe和OpenGL超级宝典。因为PyOpenGL的函数和OpenGL本身的函数几乎一模一样(只有很小的差别),所以大部分例子都不难复现。此外,NeHe上还有很多别人用Python写的源代码。
大约过了两周,我就读懂了四元数,并自己在Python中实现了它。现在我有了一个支持GLSL的环境,可以完全控制3D相机的交互。我做了一个简单的Phong着色器,并用四元数来控制相机的旋转。到目前为止,我没有遇到任何性能问题。
几个月后,我又回到了这段代码。
我尝试实现一个Python的八叉树,当我处理到8层(256x256x256个体素)时,计算需要超过2G的内存,过了几分钟后,仍然没有完成。我意识到在Python中存储很多对象并不像在C++中那样简单。于是我明白我需要把这个问题拆分开,先用C++写,然后再通过Python调用把它连接回来。
一旦我完成了这个,如果我记得的话,我会更新你。;]
(顺便回答你的问题,不,Python永远不会取代C++。这两种语言有不同的用途和优势。)
这很大程度上取决于你计算机图形课程的内容。如果你上的是我以前教过的入门课程,那基本上就是旋转的立方体和球体,做一些纹理映射和顶点动画,就这些。如果是这样的话,使用Python完全没问题,只要你能适应OpenGL那种有点不符合Python风格(说实话,也不太像C++)的状态机模式。
在做矩阵运算时,你可以使用Numpy,它的核心是用C写的,速度非常快。这样你能更快上手,更快迭代,通常也会玩得更开心。
不过,如果你上的是一些非常高级、前沿的课程,比如每个场景都有数百万个三角形、皮肤动画的计算机图形课程,那就还是用C++吧。
如果你的课程给了你选择,Python应该是个安全的选择。
但是如果你想把你的知识转化为真正的计算机图形工作,几乎所有的游戏和图形引擎都是用C或C++写的,而Python(或者Lua)通常只是用作脚本语言。