创建 Python 程序进行(视觉上令人愉悦的) 3D 物理模拟/可视化的好库有哪些?

7
有哪些适用于创建视觉效果良好的3D物理模拟/可视化的Python程序的好的库?
我看过Vpython,但是我看到的模拟看起来很丑陋,我希望它们更加吸引人。此外,它似乎是一个旧的库。对于3D编程,我看到建议使用Panda3D和python-ogre,但我不确定它是否真正适合精确模拟。另外,我更喜欢与其他库结合得好的库(例如,pygame与其他库结合得不太好)。

有哪些好的库可以用于创建Python程序,以进行(视觉上吸引人的)3D物理模拟/可视化?(例如,用于在3D笛卡尔网格上模拟抛射物或可视化移动带电粒子的电磁场) - Bentley4
http://pyopengl.sourceforge.net/ - John Riselvato
4个回答

4
与其他编程语言相比,Python的3D支持相对较弱。但是,通过大多数程序的构建方式,程序的外观比您想象的更加易变。例如,您提到VPython,虽然他们的许多示例不太吸引人,但最近的版本包括挤出、材料和皮肤,使您可以比以前更加自定义外观。
值得注意的是,在实时制作渲染质量的图像方面是不可能的(循环是这方面的重大进展,但仍未达到目标)。我相信您的问题在于您正在寻找技术现在根本无法实现的东西,但是,如果您愿意承担使模拟看起来视觉上吸引人的负担,那么VPython(这是PyOpenGL的华丽版本)可能是您最好的选择。以下是不同技术的概述,以防您正在寻找更普遍的内容:
Blender:最强大的Python图形程序,但它是为图形设计和特效而制作的,尽管其底层有非常复杂的物理运行,但Blender不适用于物理模拟。自包含。
Panda3D:经常与Blender进行比较的程序,但主要用于游戏。游戏引擎比Blender更容易使用,但渲染质量要低得多,功能丰富性也较低。自包含。
Ogre:一种非常流行的游戏开发库,具有许多强大的功能,特别是用于创建游戏环境。事件处理也非常好。可以与其他库集成,但难度较大。
VPython:旨在进行物理模拟的库,相对于其他方法,它减少了很多纹理映射和渲染能力,但这种能力仍然存在,因为VPython主要是由OpenGL构建而成,而OpenGL是最通用的图形库之一。因此,VPython也非常容易与其他库集成。
PyOpenGL:Python的OpenGL。OpenGL是最广泛使用的图形库之一,毫无疑问可以产生该列表中最漂亮的视觉效果(除了Blender,它是一个类),但是这并不容易做到。 PyOpenGL非常简洁,虽然功能齐全,但实现起来比其他任何东西都要困难。如果您知道自己在做什么,它可以很好地与其他库配合使用。

谢谢!根据您写的内容,我发现如果我想立刻开始编程的话,最好的方法是从VPython入手,尽可能开发程序,并在必要时使用PyOpenGl进行修改。您认为一般的计算机何时足够快,使得Python可以流畅地进行运行时物理模拟(粗略估计)? - Bentley4
1
你的电脑目前完全能够运行平滑的物理模拟,但你可能需要稍微调整一下对“平滑”的定义。如果你在一个简单的while循环中运行模拟,Python将尝试尽可能快地更新,这会导致一系列问题,但你可以通过简单地说出类似以下的语句来限制while循环的速率: while True: rate(100) 其中括号中的数字是每秒刷新次数,我发现20次/秒是速率不会影响模拟质量且对处理器轻微的最低值。 - Slater Victoroff
你会如何实现那个速率函数?使用 time.sleep(n) 吗? 谢谢,好的提示! - Bentley4
1
我认为rate函数实际上是内置的。 - Slater Victoroff

2
如果我需要一个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 还有一些Python绑定用于可视化工具包(VTK),但它们大多数示例都是C ++或Tk。
如果你只是想要一个场景图来移动几何体,而不是本地可视化,那么我已经看到了一些Python绑定用于Open Scene Graph,例如:http://code.google.com/p/osgswig/ 祝你好运!

2
尝试使用PyOpenGL。它是一个库,通过Python ctypes库提供Python绑定到OpenGL。
这是一个演示:

PyOpenGL baseball demo


不是,但是可以通过快速搜索找到。只需查看图像源。 - C0deH4cker
1
这个截图不太令人鼓舞 :) - Bentley4

0
从你的问题中,不清楚你想要实现什么。你是想创建一个独立的应用程序,在运行时控制模拟,还是使用Python创建一个模拟,然后离线查看?
对于后者,你可以看看Blender,这是一个开源的3D内容创作套件,包括一个Python脚本接口,可以访问应用程序的大部分(如果不是全部)内部。Blender带有一些物理和粒子库,可能会有所帮助,并且作为一个应用程序,它代表了用于制作电影视觉效果等软件类型。
如果你想制作一个独立的应用程序,在运行时控制模拟,这很可能不是一个合适的选择。但是,如果你想生成一系列可查看的图像,那么它可能值得一看。

我想制作一个独立的应用程序,可以在运行时控制模拟。如果需要使其运行良好,则图形可以最小化。例如,仅使用线条、箭头和点来重新创建参考框架和数学点。如果可能,还要为刚体提供简单但干净的模型。 - Bentley4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接