【问题标题】:What are good libraries for creating a python program for (visually appealing) 3D physics simulations/visualizations?有哪些好的库可以为(视觉上吸引人的)3D 物理模拟/可视化创建 Python 程序?
【发布时间】:2012-05-16 09:23:51
【问题描述】:

有哪些好的库可以创建用于(视觉上吸引人的)3D 物理模拟/可视化的 Python 程序?

我看过 Vpython,但是我看到的模拟看起来很丑,我希望它们在视觉上很吸引人。它也看起来像一个旧图书馆。对于 3D 编程,我看到了使用 Panda3Dpython-ogre 的建议,但我不确定它是否真的适合精确模拟。另外,我更喜欢与其他库很好结合的库(例如 pygame 与其他库的结合不太好)。

【问题讨论】:

  • 有哪些好的库可以为(视觉上吸引人的)3D 物理模拟/可视化创建 Python 程序? (例如,用于在 3D 笛卡尔网格上模拟射弹或可视化移动带电粒子的电磁场)

标签: python 3d visualization physics simulation


【解决方案1】:

试试PyOpenGL。它是一个通过 Python ctypes 库为 OpenGL 提供 Python 绑定的库。

这是一个演示:

【讨论】:

  • 没有,但是通过快速搜索找到了。看看图片src就行了。
  • 这个截图并不令人鼓舞:)
【解决方案2】:

根据您的问题,尚不清楚您想要实现什么。您想创建一个可用于在运行时控制模拟的独立应用程序,还是使用 Python 创建一个可以离线查看的模拟?

对于后者,您可以查看Blender,这是一个开源 3D 内容创建套件,其中包括一个 python 脚本接口,可以访问应用程序的大部分(如果不是全部)内部。 Blender 附带了一些 physics and particle libraries 可能有用的应用程序,它指示用于为电影等制作视觉效果的软件类型。

如果您想制作一个独立的应用程序来控制运行时的模拟,这很可能不是一个合适的选择。但是,如果您想制作一系列可视图像,则可能值得一看。

【讨论】:

  • 我想制作一个独立的应用程序,可用于在运行时控制模拟。如果需要使它正常运行,图形可以是最小的。例如。仅使用线、箭头和点来重新创建参考框架和数学点。如果可能的话,还有简单但干净的刚体模型。
【解决方案3】:

如果我需要 python 的可视化包,我会从 Processing.py 开始: https://github.com/jdf/processing.py

这是基于 java 的 Processing.org 代码的 python 绑定。可以在这里找到快速比较: http://wiki.processing.org/w/Python_Comparison

当然,如果你不局限于 python,那么 Processing 本身也是一个很好的起点: http://processing.org

还有用于 Visualization Toolkit (VTK) 的 python 绑定,但它们的大多数示例都是 C++ 或 Tk。

如果您要寻找的只是移动几何图形的场景图,而不是原生可见,那么我已经看到了一些用于 Open Scene Graph 的 python 绑定,例如:http://code.google.com/p/osgswig/

祝你好运!

【讨论】:

    【解决方案4】:

    与其他语言相比,对 python 的 3D 支持相当薄弱,但由于大多数语言的构建方式,程序的外观比您想象的要多变。例如,您谈到了 Vpython,虽然他们的许多示例在视觉上并不吸引人,但其中大部分也来自以前的版本,最近的版本包括挤压、材料和皮肤,这使您可以自定义外观,比之前。

    还可能值得注意的是,根本不可能实时制作渲染质量的图像(循环是朝这个方向迈出的一大步,但还不够)。我相信您在这里的大部分问题是您正在寻找技术现在根本无法实现的东西,但是如果您愿意承担使您的模拟看起来具有视觉吸引力的负担,Vpython(这是一个经过修饰的版本PyOpenGL)可能是你最好的选择。不过,如果您正在寻找更通用的东西,下面是对不同技术的简要介绍:

    Blender:最强大的 Python 图形程序,但它是为图形设计和特殊效果而设计的,虽然它下面运行着非常复杂的物理,但 Blender 不是为物理模拟而设计的。自给自足。

    Panda3D:一个经常与 Blender 相提并论的程序,但主要用于游戏。游戏引擎比 Blender 更好用,但渲染质量要低得多,功能丰富性也是如此。自给自足

    Ogre:一个在当时非常流行的游戏开发库,具有许多强大的功能,尤其是用于创建游戏环境。事件处理也得到了很好的实现。可以与其他库集成,但有困难。

    VPython:一个用于物理模拟的库,与其他方法相比,它消除了很多纹理映射和渲染能力,但是这种能力仍然存在,因为 VPython 主要是从 OpenGL 构建的,这是最通用的方法之一周围的图形库。因此,VPython 也很容易与其他库集成。

    PyOpenGL:用于 Python 的 OpenGL。 OpenGL 是使用最广泛的图形库之一,毫无疑问,它能够在这个列表中产生一些最好的视觉效果(除了 Blender,它是它自己的一个类),但是要做到这一点并不容易. PyOpenGL 非常简单,虽然功能已经存在,但实现起来却比其他任何东西都难。非常愿意与其他库一起使用,但前提是您知道自己在做什么。

    【讨论】:

    • 谢谢!阅读您所写的内容,我想如果我想现在开始,最好的方法是从 VPython 开始,尽可能地开发程序,并在必要时使用 PyOpenGl 对其进行修改。你认为普通计算机什么时候才能足够快,让 python 顺利地产生运行时物理模拟(粗略估计)?
    • 您的计算机目前完全能够运行平滑的运行时物理模拟,但您可能需要稍微更改平滑的定义。如果你在一个简单的 while 循环中运行你的模拟,python 将尝试尽可能快地更新,这会产生许多问题,但是你可以通过简单地说类似的话来限制你的 while 循环的速率: while True: rate(100 ) 其中括号中的数字是每秒刷新的次数,我发现每秒刷新 20 次大约是在不损失质量的情况下可以达到的最低速度,并且对您的处理器来说很轻。
    • 您将如何实现该速率功能?使用 time.sleep(n)?谢谢你的好建议!
    • 我相信rate函数其实是内置的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多