我正在寻找将 3D 图形插入 ipython (Jupyter) 笔记本的最便捷方法?我的意思是一些简单的 3D 机器模型(在我的情况下是航天器),主要由简单的图元组成,例如 CAD
我想要的是:
- 阅读笔记本的人可以交互地旋转模型
- 该模型可以从文件加载,也可以直接从 python(或其他)源代码生成
- 该模型可以很容易地由代码中的简单图元(线、圆锥、圆柱、球体......)组成
- 它不需要一些非标准且难以安装的依赖项,因此任何人都可以轻松地在这台计算机上运行笔记本
我到目前为止发现的可能的解决方案(和问题):
- FreeCAD IPython 集成(只是提议,似乎还没有完成)
- three.js- 但我既没有使用过 Javascript,也没有使用过它的集成到 IPython 中,所以我更喜欢一些 python 解决方案
- 已见.js似乎正是我想要的,但它又是 javascript
- 点点滴滴- 它用于数据可视化,而不是 3D 模型可视化
- pyopengl- 有点太低级了,我不确定它在网络浏览器和 Jupyter 中的运行情况如何 - 我没有找到任何示例
- POVray- 不是交互式的,集成到 IPython 会很麻烦(调用外部渲染,然后加载结果图像)
答案1
答案2
如果你需要在 Jupyter 模型中打开 3D 模型(以 .obj 格式,可从 FreeCad 导出),则可以使用obj2html(Jupyter 图像示例)。
你可以用下面的方式做一个简单的 hello world:
! pip install obj2html
! wget https://gitlab.com/nicolalandro/obj2html/-/raw/main/test/assets/model.obj
from obj2html import obj2html
from IPython.display import display, HTML
obj2html('model.obj', 'index.html')
display(HTML('index.html'))
但是对于您的模型,您可能也以这种方式设置灯光和相机:
camera={
"fov": 45,
"aspect": 2,
"near": 0.1,
"far": 100,
"pos_x": 0,
"pos_y": 10,
"pos_z": 20,
"orbit_x": 0,
"orbit_y": 5,
"orbit_z": 0,
},
light={
"color": "0xFFFFFF",
"intensity": 1,
"pos_x": 0,
"pos_y": 10,
"pos_z": 0,
"target_x": -5,
"target_y": 0,
"target_z": 0,
},
obj_options={
"scale_x": 30,
"scale_y": 30,
"scale_z": 30,
}
obj2html('model.obj', 'index.html', camera, light, obj_options)
您可以在以下网址阅读更多内容源代码页面(使用 three.js)或在这篇 Medium 文章。