为什么 STL 文件需要法向量?

2023-12-25

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

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

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

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

我在一个帖子中读到,Autodesk Meshmixer 会根据顶点忽略法线向量和图形三角形。提供错误的法线向量似乎不会改变结果。为什么立体光刻 (.STL) 文件要求每个三角形都有一个法向量? https://stackoverflow.com/questions/47460033/why-do-stereolithography-stl-files-require-each-triangle-to-have-a-normal-vec


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

FWIW, 网格混合器 https://help.autodesk.com/view/MSHMXR/2019/ENU/?guid=GUID-90CE1063-9807-4A11-9E15-61E3AFD32A5E有一个 FlipSurfaceNormals 工具可以帮助解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 STL 文件需要法向量? 的相关文章

  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • 如何使用边缘和内部镶嵌因子完成三角形面片镶嵌?

    I am just learning tessellation and i came across with below example for triangle patch tessellation but i am not sure h
  • 更改组合框下拉列表边框的颜色

    My code Private Sub ComboBox2 DrawItem sender As Object e As DrawItemEventArgs Handles ComboBox2 DrawItem If e Index lt
  • 如何在 R 中创建没有情节的图例?

    这是一个艺术项目 我创建了一个包含 5 种不同颜色的许多点的散点图 我想创建一个与绘图完全分开的图例 因为它不在绘图上 也不在绘图旁边 而是在它自己的窗口中 因此我可以将图例保存为它自己的 pdf 文件 这样我就可以将我的情节和图例分开打印
  • 图形未在 JLayeredPane 中显示(java swing)

    我正在尝试根据用户输入逐步构建图像 我想做的是创建一堆图形并将它们添加为图层 但是我遇到了一些问题 因为它们不会显示 这是我正在使用的代码 public class ClassA protected final static int dim
  • 3D 透视投影的剪辑矩阵

    我正在尝试创建一个简单的 3D 图形引擎 并找到并使用了我在这里找到的方程 http en wikipedia org wiki 3D projection cite note 0 http en wikipedia org wiki 3D
  • 从主模块访问动态功能模块的可绘制文件夹中的图形

    我正在尝试动态模块拆分 API 交付 以便将我的游戏应用程序分解为即时版本和可安装版本 我一直在关注这里的 Codelabs 教程https codelabs developers google com codelabs on demand
  • 将渲染后效果应用于 XNA 中的 SpriteBatch

    在 XNA 框架中 有没有一种方法可以使用典型的 SpriteBatch 方法渲染 2D 场景 然后在渲染该帧后将效果应用于整个图像 例如 模糊 棕褐色甚至使整个事情看起来像旧电影胶片 带有颗粒 灰尘 线条等 是的 您要做的就是将渲染目标设
  • x11/xlib 与 Microsoft Visual C++

    我从维基百科复制粘贴这段代码 http en wikipedia org wiki Xlib http en wikipedia org wiki Xlib 我收到此错误 fatal error C1083 Cannot open incl
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • Java制作一条有向线并使其移动

    我想画一条有向线并让它移动 我能够绘制一条有向线并移动该线 但当我移动该线时箭头会移位 这是我的绘画方法 Line2D Double line new Line2D Double startX startY endX endY g2d dr
  • c# GDI边缘空白检测算法

    我正在寻找解决方案检测边缘空白c 位图 来自 c 托管 GDI 库 图像将是透明的 or white 大多数 400x 图片的尺寸为 8000x8000px 边缘周围有大约 2000px 的空白 找出边缘的最有效方法是什么 x y 高度和宽
  • Java 旋转图像

    Override public void paintComponent Graphics g super paintComponent g Graphics2D g2 Graphics2D g create rotation of play
  • 当我调用 fillRoundRect() 时,只有 1 个角被圆化

    当运行此代码时 import java awt Color import java awt Graphics import java awt Graphics2D import java awt RenderingHints import
  • 当 RotationY > 60 时,CardView 显示伪影

    我正在尝试使用 Android 的新功能CardView在旋转动画中 然而 当CardView s rotationY属性设置得足够高 在 Lollipop 设备上会发生一些非常糟糕的事情 下面是一些很容易编译的示例代码 MainActiv
  • 压缩为 png 时位图颜色发生变化

    我目前正在开发一个隐写 Android 应用程序作为一个班级项目 我创建了一个对象 它将在另一个图像中对图像进行编码并返回编码的位图 该代码在单独的线程中运行 new Thread new Runnable public void run
  • 按顺时针顺序对四个点排序

    数组中的四个 2D 点 我需要按顺时针顺序对它们进行排序 我认为只需一次交换操作就可以完成 但我还没有能够正式放下这一点 编辑 在我的例子中 这四个点是凸多边形 编辑 这四个点是凸多边形的顶点 它们不必按顺序排列 如果你想从更数学的角度来看
  • 使用 Python 图像库 (PIL) 绘制抗锯齿线

    我正在使用 Python 图像库的 ImageDraw line 绘制一堆线条 但它们看起来很可怕 因为我找不到消除锯齿的方法 如何在 PIL 中消除锯齿线 这是一个非常快速地组合在一起的函数 用于用 PIL 绘制一条抗锯齿线 这是我在谷歌
  • 最快的 Sobel 边缘检测 C#

    我想制作一个实现索贝尔边缘检测的程序 这是我的代码 private Bitmap SobelEdgeDetect Bitmap ori Bitmap b original Bitmap bb original int width b Wid
  • GDI 已加速。有谁知道这是什么时候发生的?

    概述这个问题的背景 在工作中我们使用 Dell Precision 工作站 我目前的电脑是 NVidia Quadro FX1700 我的团队正在开发实时数据采集系统的图形组件 因此 我们总是留意图形操作是否不会占用太多 CPU 时间 为了

随机推荐

  • Fortran FORMAT 语句中的语法错误

    I am using the gfortran compiler and I am unable to find the syntax error in the line Can anyone tell me the syntax erro
  • SQL排除查询

    是否可以在单个 SQL 语句中执行以下操作 例如 在提示中使用电话号码的子集8001231000 8001239999 然后查询我的数据库中有电话号码 并返回原始子集中哪些电话号码不在我的数据库中 我的数据库是Oracle 10g 基本上不
  • JSON.NET 反序列化对象/对象数组中的对象

    我遇到的情况是 我使用的 API 返回不一致的 JSON 我想使用 JSON NET 对其进行反序列化 在一种情况下 它返回一个包含对象的对象 注意外面的 1 可以是任何数字 1 0 db id 12835424 title XXX 1 d
  • 以编程方式评估 somaxconn 的值,以设置监听积压参数

    对于服务器端编程 我使用监听函数 int listen int sockfd int backlog 我知道积压工作应该小于或等于我将运行服务器程序的主机系统上设置的 somaxconn 如果我使用 SOMAXCONN 作为积压工作 则相当
  • 逐行扫描谷歌文档

    所以基本上 我尝试使用 node js 扫描 google 文档 然后如果 ROBLOX id 在那里 它就会跟踪它 当它跟踪它时 如果它加入了 id 列表中的某个组 它就会自动将其放逐 有什么帮助吗 我在逐行扫描谷歌文档时有点卡住了 我不
  • 如何在创建文件之前测试文件是否存在

    我想看看文件是否存在 如果它不存在 那么我想创建它 顺便说一句 我正在使用Linux 你不能可靠地做到这一点 在您检查文件是否存在和创建文件之间 另一个进程可能会创建它 您应该继续创建该文件 根据您尝试执行的较大操作 如果文件已存在 您可能
  • 子div高度与父div高度不同

    我有一个7divs包裹在 3divs 除第一个之外的所有div被设置为width 0 并且它们都设置为inline block 最外面的div有一个设定的高度166px 结果出来了 独生子 7 divs你看 是第一个 问题是 第三个包装器
  • 如何使用ProxyPass通过Express提供静态文件?

    我正在使用 Apachemod proxy使用 Express 为我的 Node 应用程序提供服务 ProxyPass nodeapp http localhost 3000 ProxyPassReverse nodeapp http lo
  • 使用 MATLAB 解析 HTML 中的锚点 URL,帮助快速

    我有严格的时间限制 我真的需要一个正则表达式来解析这种类型的锚点 它们都是这种格式 a href 20120620 0512 c2 1024 jpg 20120620 0512 c2 102 gt a 对于网址 20120620 0512
  • 使用 xcode 6.1 (OSX) 的 Swift 中的 NSTextField 出现问题

    我开始使用 Swift 但没有使用 Objective C 有人可以教我如何获取和设置NSTextField在 OSX 下使用 xcode 6 1 的 Swift 中 您获取并设置一个值NSTextField与stringValue财产 例
  • 登录控制:WebForms UnobtrusiveValidationMode 需要“jquery”的 ScriptResourceMapping。添加名为 jquery 的 ScriptResourceMapping

    我正在开发一个 ASP NET 网站 我有一个没有任何控制的网络表单 当我向此表单添加登录控件并在浏览器中查看此表单时 显示错误 WebForms UnobtrusiveValidationMode 需要 jquery 的 ScriptRe
  • qt moc.exe错误

    我正在使用 QT Creator 1 3 1 并尝试编译 但出现此错误 请帮我摆脱它 mingw32 make 1 Leaving directory C Documents and Settings eyalk My Documents
  • 向量迭代器不兼容

    我目前正在开发 C 图形库 现在陷入了运行时在调试模式下出现断言错误的问题 我还在这里查看了其他一些问题 但没有一个问题和答案能引导我找到解决方案 在阅读了一些论坛后 我的印象是 发生此错误是因为一旦向量内容发生更改 迭代器就会变得无效 例
  • 使用 ActiveMerchant 自定义 Paypal Express 的评论页面

    我正在使用 ActiveMerchant 让我的 Rails 应用程序能够访问 Paypal 的 Express Checkout 我想在评论页面上添加订单详细信息 如下所述 这可以做到吗 目前 我的控制器代码如下所示 def paypal
  • 如果函数是对象,那么函数体在哪里?

    如果函数是对象 那么函数体在哪里 让我澄清一下我所困惑的事情 函数就是对象 好吧 我可以将对象视为由字符串键和任意类型值组成的哈希映射 我可以做这个 function Square size Rectangle call this size
  • 构建没有依赖项的 MSBuild 目标

    有什么方法可以告诉 MSBuild 4 0 构建目标 但忽略任何依赖项 我只想建立这个目标本身 没有别的 我想重申 EMP 的解决方案 由于我的名声微薄 我不能投票给他 避免 MSBuild 重建项目文件中列出的所有依赖项的默认行为的正确方
  • 避免当一个块出现故障时关闭整个数据流网络

    我在用数据流Ex https github com gridsum DataflowEx我想知道如果抛出异常 如何避免关闭整个数据流 我有一个系统 任务会随机进入 我希望网络记录故障 放弃该特定任务并继续执行其他任务 在阅读有关 TPL 和
  • 如何在android中使用不同的父节点解析xml

    在我的 xml 文件中 我有两个或多个父节点 例如 父节点pizza 属性是1 Veg Pizza 父节点汉堡 属性是1个素食汉堡 每当用户点击披萨时listviewitem 那么用户应该只能查看另一个活动中的披萨项目列表listview
  • 使用 python 3 读取十六进制字符并将其转换为 utf-8

    我有一个包含以下字符串的文件 data txt M xc3 xbchle x0astra xc3 x9fe 现在需要读取该文件并将十六进制代码解释为 utf 8 到目前为止 这是我的尝试 usr bin python3 import os
  • 为什么 STL 文件需要法向量?

    STL 是最流行的 3D 打印 3D 模型文件格式 它记录构成 3D 形状的三角形表面 我阅读了 STL 文件格式的规范 这是一种相当简单的格式 每个三角形由12个浮点数表示 前 3 个定义法向量 接下来的 9 个定义三个顶点 但这里有一个