15

我正在开始一门计算机图形学课程,我必须选择一门语言。

选择在 C++ 和 Python 之间。我对 C++ 没有任何问题,python 正在进行中。所以我想沿着 python 之路走下去,使用 pyopengl 作为图形部分。

不过我听说,性能是个问题。

python / pyopengl 是否成熟到足以挑战 C++ 的性能?

我意识到这是一个很长的目标,但我想听听你对 pyopengl 使用的想法和经验。

4

5 回答 5

30

这在很大程度上取决于您的计算机图形课程的内容。如果你正在做类似我过去教过的入门课程,它基本上是旋转立方体和球体,一些纹理映射和一些顶点动画,仅此而已。在这种情况下,假设您可以绕过 Unpythonic(老实说,非 C++)OpenGL 状态机范式,Python 就足够了。

对于像做矩阵数学这样的事情,你可以使用 Numpy,它的核心是用 C 语言编写的,而且速度非常快。您将更快地启动和运行,更快地迭代并且很可能获得更多乐趣。

但是,如果您正在学习一些核心的、前沿的、每场景数百万个三角形皮肤动画的所有计算机图形课程,请坚持使用 C++。

如果你的班级给了你选择,那么 Python 可能是一个安全的赌注。

但是,如果您想将您的知识用于计算机图形学的实际工作,几乎所有游戏和图形引擎都是用 C 或 C++ 编写的,而 Python(或 Lua)则作为脚本语言。

于 2010-03-22T00:36:01.240 回答
7

以下是我的个人经验:

当我第一次听说 PyOpenGL 时,我非常激动。OpenGL 是我最喜欢的语言吗?交易!于是我开始自学3D图形编程。

我浏览了一些教程和书籍,例如NeHeOpenGL SuperBible。因为PyOpenGL 的功能与 OpenGL 本身的功能相同(只有很小的差异),所以复制大多数示例并不难。此外,NeHe 还有很多其他人制作的 Python 源代码。

不久之后(大约 2 周)我阅读了四元数并自己用 Python 实现。现在我有了一个支持 GLSL 的环境,其中包含完整的 3D 相机交互选项。我制作了一个简单的 Phong 着色器,并使用四元数来驱动我的相机旋转。我还没有受到任何性能影响。

几个月后,我回到了这段代码。

我尝试了一个 Python Octree 实现,当我达到 8 个级别(256x256x256 体素)时,计算需要超过 2G 的 RAM,几分钟后,它仍然没有完成。我意识到,当您在 Python 中存储许多对象时,它不仅仅是像 C++ 中的简单结构。这就是我意识到我需要将其分解出来,用 C++ 编写,然后用 Python 调用将其粘合回来的地方。

一旦我完成了这个,如果我记得,我会更新你。;]

(要回答你的问题,不,Python 永远不会取代 C++。这两种语言有不同的目的和不同的优势。)

于 2010-04-24T14:25:34.140 回答
7

Python是要走的路。由于所有的opengl编程都是将数据上传到显卡RAM,然后使用opengl对其进行操作,因此python中的速度限制是没有意义的。它还使 C++ 中的困难事情变得容易,即打开文件、图像、声音等。

至于上面实现八叉树的人,没有什么能阻止你使用用 C 编写的 numpy 来实现它。(还要确保您使用的是像二叉树一样的线性内存,而不是指向类似结构的链接中的对象的指针)

关于这个主题的博客文章

于 2010-12-15T04:55:54.027 回答
2

Python 是一门很棒的语言,但它不是正确的图形工具。如果你想做任何远程高级的事情,你将不得不使用非 Python 库,最终会得到用 Python 编写的丑陋的 C 代码。

于 2010-03-21T21:24:17.197 回答
0

Python 是一种动态语言,它在运行时被解释和编译,因此性能不能比 C++ 更好——看看这篇文章,比较几种编程语言。

另一个喜欢 C++ 的好理由是并行执行。CG 中的许多任务可以通过将它们拆分为多个线程来优化 tgat 并行运行 - 曾经尝试过使用 Python 启动一个新线程吗?

于 2010-03-21T21:18:32.260 回答