【问题标题】:pyopengl: Could it replace c++? [closed]pyopengl:它可以取代 c++ 吗? [关闭]
【发布时间】:2011-01-30 03:08:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 这不是Python是否足够成熟,这只是计算机性能的问题,计算机还没有达到性能水平,他们可以负担得起与c++相比浪费python使用的额外周期,然而,这将在某些时候不可避免地发生变化(随着计算机速度逐年增加)。我认为,像 c++ 这样的语言将始终用于尖端科学等,他们试图使用每一个最后一点计算资源,但对于大多数应用程序来说,更高级别的语言最终会接管,就像迄今为止它们在整个历史中所做的那样

标签: python c++ opengl 3d pyopengl


【解决方案1】:

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

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

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

如果你的班级给了你选择,那么 Python 可能会很好。

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

【讨论】:

  • 谢谢,我很欣赏现实世界的计算机图形段落
  • @phkahler - 你是什么意思?
  • 我认为 phkahler 的意思是你非常非常正确,以至于他无法用语言来解释。 ;]
  • & 泽维尔。是的,这是一个很好的答案,显然我无法表达这个想法:-)
【解决方案2】:

这是我的个人经历:

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

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

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

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

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

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

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

【讨论】:

  • 随着计算机性能的提高,即使对于高性能游戏,动态语言最终也可能变得有用,计算机能力应始终被视为不如程序员有价值,当计算机足够先进时,使用 Python 是有意义的对于现在只能在 C++ 中完成的事情,当然它在机器上运行不会更快,但开发时间会……会有范式转变,所以只有现在甚至不可能的事情将在 c++ 中完成,现在所做的一切都可以用 Python 之类的语言完成
  • >> 当然在机器上运行不会更快
  • 我在 Python 中完成了一个大型八叉树作为一系列 Numpy 操作。 Numpy 简直是疯了,我已经习惯了这样的想法:一想到在 C 中尝试就让我畏缩的东西可以用几行 Python 来完成。 Numpy 对大数据处理也是如此。
【解决方案3】:

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

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

Blog post on this subject

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 这正是一位朋友告诉我的,相同的词,不同的语言。
    • 这就是为什么在遇到疑问时要编写自己的库。
    【解决方案5】:

    Python 是一种动态语言,可以在运行时进行解释和编译,因此性能不能比 C++ 更好 - 请查看 this post 以比较几种编程语言。

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

    【讨论】:

    • 您能否准确地说出“曾经尝试使用 Python 启动新线程”的含义?线程在 Python 中很容易启动。 :) 你的意思是 CPython 的线程受到全局解释器锁的影响吗?
    • 其实我从来没有用 Python 做过多线程开发,但是我看到了很多反对它的帖子
    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2011-04-13
    • 2015-08-25
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多