有没有一种使用Python在3D中绘制基本图形的方法?

24
我想在三维图形中绘制球体、圆柱体和平面(补丁),并希望能够交互地旋转、平移和缩放场景。我想用Python完成这个任务。我已经使用Matplotlib来制作二维图形,但从未用Python进行三维图形处理。
有什么建议吗? 有任何教程链接吗? 有什么主意吗?

也许可以通过一些Python的OpenGL绑定来实现? - Bart
是的,我考虑过OpenGL,但我认为它太“基础”了(即我必须从头开始定义查看器),而我想要更高级的东西。例如,在3D图中绘制类似Matlab的补丁将是一种更容易的方式...但我不知道。也许这在Python中不存在? - dom_beau
为什么不使用matplotlib中包含的mplot3d - Dhara
http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 看起来你可以使用它绘制三维图形。 - mrvux
1
matplotlib中的mplot3d可以显示3D数据集绘图(如表面图、网格图),但我不知道如何绘制一个带有三角形数组的补丁(x,y,z顶点)。也许我错了... - dom_beau
2个回答

14
如果您习惯于使用matplotlib,那么如果满足您的要求,mplot3d可能是一个不错的选择。
另外,还有VPython。这允许您更自由地创建任意对象并操纵它们,但是需要学习更多内容。

我还要提一下,Blender可以通过Pyscripts进行控制。 - Joran Beasley
1
我将添加VisPy - 这是非常新的并且使用GPU的库。大多数示例都是2D的,但它也可以处理3D。http://vispy.org/ - Mick_
谢谢,@Mick_。我之前没见过这个,看起来很有前途。 - deadly

0
这个库Glass Engine可以帮助你。它支持超过40个基本元素。 要安装它,只需pip install glass-engine。使用Glass Engine
  1. 你可以使用以下代码显示一个基本元素并与之交互:
from glass_engine import *
from glass_engine.Geometries import *

scene, camera, light = ModelView()

cone = Cone(radius=0.5, height=1)
cone.position.z = -0.5
scene.add(cylinder)

camera.screen.show()

然后你可以得到以下结果: cone display 你可以使用鼠标左键拖动来旋转,右键拖动来平移,滚轮滚动来缩放场景。
2. 你可以使用以下代码在场景中显示许多基本图形并与之交互:
from glass_engine import *
from glass_engine.Geometries import *

scene, camera, light, floor = SceneRoam()

geoms = \
[
    Sphere(radius=0.5)    , Cone(radius=0.5)        , Cylinder(radius=0.5),
    Box(Lx=0.7)           , Prism(radius=0.5)       , Pyramid(radius=0.5),
    Octahedron(radius=0.5), Dodecahedron(radius=0.5), Icosahedron(radius=0.5)
]

for i in range(len(geoms)):
    geoms[i].position.x = 2*(i % 3 - 1)
    geoms[i].position.y = 2*(1 - i // 3)
    geoms[i].position.z -= geoms[i].z_min
    scene.add(geoms[i])

camera.screen.show()

然后你可以得到以下结果: 很多原始场景 你可以使用 W A S D E C 在场景中漫游,鼠标右键拖动以旋转,滚轮滚动以缩放。
查看完整文档:Glass Engine Documentation
虽然它是用中文写的,但你可以使用翻译工具将其翻译成你的语言。

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