【问题标题】:Why is a normal vector necessary for STL files?为什么 STL 文件需要法线向量?
【发布时间】:2018-03-13 20:21:10
【问题描述】:

STL 是最流行的 3d 打印 3d 模型文件格式。它记录构成 3d 形状的三角形表面。

我阅读了 STL 文件格式的规范。这是一种相当简单的格式。每个三角形由 12 个浮点数表示。前 3 个定义法线向量,接下来的 9 个定义三个顶点。但这里有一个问题。三个顶点足以定义一个三角形。法线向量可以通过取两个向量的叉积来计算(每个向量都从一个顶点指向另一个顶点)。

我知道法线向量在渲染中很有用,并且通过包含法线向量,程序不必在每次加载相同的模型时都计算法线向量。但是我想知道如果创建软件故意包含错误的法向量会发生什么?它会在渲染软件中产生错误的结果吗?

另一方面,三个顶点说明了三角形的一切。包含法线向量将允许信息中存在逻辑冲突,并将文件大小增加 33%。如有必要,渲染软件可以在合理的时间内计算法向量。那么格式为什么要包含它呢?该格式创建于 1987 年,用于立体光刻 3D 打印。那时计算法向向量对计算机来说成本高吗?

我在一个线程中读到 Autodesk Meshmixer 会根据顶点忽略法线向量和图形三角形。提供错误的法线向量似乎不会改变结果。 Why do Stereolithography (.STL) files require each triangle to have a normal vector?

【问题讨论】:

  • 我没有答案。 Wikipedia 说了几句话。这可能与区分开放表面的内部和外部有关。
  • 是的,STL 没有缠绕规则规范,这意味着您不知道计算出的法线应该面向哪个方向......因此您不知道应该从哪一侧定位打印头。可以粗略计算,但这是相对昂贵的操作,尤其是对于高三角形数的凹面网格。
  • 其实根据all3dp规定绕线要求逆时针向内。法线应该向外。

标签: graphics 3d-printing


【解决方案1】:

至少在使用 Cura 对模型进行切片时,表面法线的方向会有所不同。我经常遇到 STL 文件,这些文件在任何查看器中呈现为实体对象时看起来只是找到,但由于某些面的表面法线方向错误,切片器“认为”应该为空的区域(通常是凹面)是内部的一部分,切片器创建一个“顶层”覆盖凹形区域的细节。 (这是使用从某个 SketchUp 源导入的 Meshmixer 文件导出的 STL)。

FWIW,Meshmixer 有一个 FlipSurfaceNormals 工具来帮助处理这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 2016-04-09
    相关资源
    最近更新 更多