【问题标题】:3D *.stl surface model convert to 2D image stack?3D *.stl 表面模型转换为 2D 图像堆栈?
【发布时间】:2016-06-16 15:23:17
【问题描述】:

好的,首先让我明确一点,我对将图像堆栈转换为 3D 模型不感兴趣。

我有一个 *.stl 文件(三角表面网格),我想将它切回到图像堆栈中。我看过 Slic3r 和 Meshmixer,但它们都只提供 Gcode。

因此,鉴于我有表面上所有点的顶点(偶然不是凸的)及其连通性。有哪些图书馆可以帮助解决这个问题?

我的感觉是,我需要在未通过已知顶点的切片上插入边界。

我很熟悉 Python 和 C++,但我愿意拓宽我的视野。

【问题讨论】:

  • 您愿意提供更多细节吗?
  • 重写回答...只是猜测这也许是 3D 打印机 :) ?
  • 不能将 STL 的保真度与图像堆栈进行比较。我确实看过一些切片程序,但它们只允许导出为 Gcode。但同样的算法一定能只输出轮廓数据?

标签: python c++ graphics 3d imaging


【解决方案1】:

例如,如果您使用 OpenGL(在您的应用程序中以任何方式)渲染您的网格,那么您只需:

  1. 设置您的相机,使屏幕投影平面与切片平行...
  2. 像往常一样清除屏幕缓冲区,将glClearColor 设置为背景色
  3. 通过将glClearDepth 设置为相机空间中切片的 Z 坐标来清除深度缓冲区
  4. 设置glDepthFunc(GL_EQUAL)
  5. 渲染网格

类似:

// here set view
glClearColor( 0.0,0.0,0.0,0.0 ); // <0.0,1.0> r,g,b,a
glClearDepth( 0.5 );             // <0.0,1.0> ... 0.0 = z_near, 1.0 = z_far 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDepthFunc(GL_EQUAL);
// here render mesh

这将只渲染片段具有Z==Slice coordinate 的切片。 GLSL 也可以通过丢弃所有具有不同Z 的片段来完成此操作。 DirectX 应该有类似的东西(我不使用它,所以我不确定)。

由于大多数网格是 BR 模型(空心),因此您将获得切片的周长,因此您很可能需要在之后填充它以满足您的需求...

您还可以尝试渲染厚切片...其中 Z 约为预定义值...

【讨论】:

  • 好吧,这看起来很有希望,我的工作已经结束了,但我可以看到它的去向,看起来像是强迫我完成那些 OpenGL 教程的好方法。切片数据将存储在哪里?有没有可以写成二维文件的数组?
  • @DrBwts 您可以直接渲染到纹理并将其保存为图像...如果您有经验,您还可以渲染到纹理数组并在单个网格渲染中渲染所有切片(但我从未使用过纹理数组,所以我无能为力)
【解决方案2】:

如果 HTTP API 解决方案适合您的目的,那么我建议使用以下 resource

您可以将 3D 网格(STL、OBJ、3DS)发布到 API 端点并获得 JSON 响应。它将包含指向 3D 模型的 2D 图像渲染的 URL,以及其他 3D 测量结果,例如体积、面积、边界框、构建时间。

用 python、PHP、JavaScript 甚至 cURL 命令行脚本编写的与 Manifold API 端点接口的客户端库也是 available

我希望这对您的搜索有所帮助。如果您不是在寻找黑盒解决方案而是尝试自己实现 3D 渲染器,请原谅。

【讨论】:

    猜你喜欢
    • 2012-12-03
    • 2014-04-26
    • 2013-09-25
    • 2013-09-13
    • 1970-01-01
    • 2012-05-25
    • 2011-02-23
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多