Jupyter 笔记本(ipynb)中的 3D 图形

Jupyter 笔记本(ipynb)中的 3D 图形

我正在寻找将 3D 图形插入 ipython (Jupyter) 笔记本的最便捷方法?我的意思是一些简单的 3D 机器模型(在我的情况下是航天器),主要由简单的图元组成,例如 CAD

我想要的是:

  • 阅读笔记本的人可以交互地旋转模型
  • 该模型可以从文件加载,也可以直接从 python(或其他)源代码生成
  • 该模型可以很容易地由代码中的简单图元(线、圆锥、圆柱、球体......)组成
  • 它不需要一些非标准且难以安装的依赖项,因此任何人都可以轻松地在这台计算机上运行笔记本

我到目前为止发现的可能的解决方案(和问题):

  • FreeCAD IPython 集成(只是提议,似乎还没有完成)
  • three.js- 但我既没有使用过 Javascript,也没有使用过它的集成到 IPython 中,所以我更喜欢一些 python 解决方案
    • 已见.js似乎正是我想要的,但它又是 javascript
  • 点点滴滴- 它用于数据可视化,而不是 3D 模型可视化
  • pyopengl- 有点太低级了,我不确定它在网络浏览器和 Jupyter 中的运行情况如何 - 我没有找到任何示例
  • POVray- 不是交互式的,集成到 IPython 会很麻烦(调用外部渲染,然后加载结果图像)

答案1

我建议使用维斯塔工具

检查以下示例。

import pyvista
from pyvista import examples
from itkwidgets import view
dataset = examples.load_uniform()
dataset
view(dataset, slicing_planes=True, ui_collapsed=True, shadow=False)

这会给出以下结果。

在此处输入图片描述

答案2

如果你需要在 Jupyter 模型中打开 3D 模型(以 .obj 格式,可从 FreeCad 导出),则可以使用obj2htmlJupyter 图像示例)。

你可以用下面的方式做一个简单的 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 文章

相关内容