stl格式-3D三角形

文章目录

  • 什么是stl文件?
  • 格式首选
  • stl的语法
    • 1.这是一个stl格式的文件:(ASCII码)
    • 2.下面先举个例子(难度略微提示)
      • 补充:关于\<\<我试了一下:这个法线你随便写好像也没问题\>>
    • 3.来个立方体
    • 4.最后再写一个由三个直角形组成的立方体(直棱锥)
    • 5.amend 修正(右手定则,法线向外)

什么是stl文件?

首先说一下,这个stl不是cpp中的stl库.

指的是以.stl结尾的文件(S T ereo L ithography)

STL(Standard Tessellation Language):STL是一种用于表示三角网格的一种文件格式,它将模型表示为一系列连接的三角形。STL文件通常分为两种类型:ASCII二进制。ASCII STL文件使用文本表示,包含逐个定义三角面片的数据,而二进制STL文件则使用二进制编码,更紧凑且通常更常用。STL文件广泛用于3D打印和计算机辅助设计(CAD)等领域。

格式首选

STL 文件格式的 ASCII 版本是用纯 ASCII 编写的。但是,由于文件格式较大,因此没有选择该文件格式作为使用的首选格式。(但是二进制无法编写,我们使用ASCII码来编写)

以下从文件大小,读写速度,数据精度,文件解析效率四个方面来解释二进制格式的优势:

  1. 文件大小:二进制格式的STL文件通常比ASCII格式更小,因为二进制格式使用固定长度的数据表示,而ASCII格式使用可变长度的文本表示。这意味着二进制格式可以更有效地存储模型的几何数据,减少存储和传输的开销。
  2. 读写速度:由于二进制格式的数据是以二进制编码存储的,相比于ASCII格式,读取和写入二进制STL文件的速度更快。二进制数据可以直接按字节进行读写,无需进行解析和转换操作,因此在处理大型模型或需要频繁读写的场景下,二进制格式能提供更高的效率。
  3. 数据精度:二进制格式的STL文件可以提供更高的数据精度。由于ASCII格式使用文本表示数字,存在精度损失和舍入误差的问题。而二进制格式使用固定大小的浮点数表示,可以保持更高的精度,并减少舍入误差。
  4. 文件解析效率:由于二进制格式的STL文件直接存储了几何数据的二进制表示,解析器可以更快速地读取和处理文件。相比之下,解析ASCII格式的STL文件需要进行文本解析和字符串处理,可能会更耗时。

stl的语法

1.这是一个stl格式的文件:(ASCII码)

solid namefacet normal ni nj nkouter loopvertex v1x v1y v1zvertex v2x v2y v2zvertex v3x v3y v3zendloopendfacet
endsolid name
聪明的小伙伴应该意识到了:
ni nj nk
与
v1x v1y v1z
v2x v2y v2z
v3x v3y v3z
就是我们要填入的参数
{
ni nj nk代表法线的方向
v1x v1y v1z是顶点1的坐标,
然后是顶点2,顶点3的坐标然后法线(高一知识终于用到了,然后考研也考)的方向可以通过计算三个顶点的叉乘得到.[这是一种方法(还有就是,如果你不会求法线也不要怕,后面写的很详细)]或者是你已经有了一个具体的模型,然后你可以使用Blender软件来获取相关数据[这是第二种方法,在这篇文章,咱们仅仅只谈方法一,因为方法二是使用轮子,现在咱们来沉下心来造轮子!]
}然后name想填啥就填啥,只要保证solid name与endsolid name保持一致就OK了!!!

2.下面先举个例子(难度略微提示)

(其实难度也不是很高,难度在于:网上还没有中文资料,大多数都是英文的,然后即使翻译过来,如果不是专业的翻译人员,翻译过来的意思也不是那么通俗易懂)

现在假设有一个平面三角形,顶点坐标为:
顶点一:(0,0,0)
顶点二:(1,0,0)
顶点三:(0,1,0)
(这个也很简单,大家可以在纸上画一下)
然后我们就要填入数据了!首先,计算就是计算法线的方向.法线的方向可以通过计算任意两条边的叉积得到.
我们计算顶点2和顶点1以及顶点3与顶点1的向量:
向量a = (1,0,0)-(0,0,0) = (1,0,0) = (a₁,a₂,a₃)
向量b = (0,1,0)-(0,0,0) = (0,1,0) = (b₁,b₂,b₃)法线的方向就直接axb得到:ni nj nk = axb = (0,0,1)

然后,至于为啥 (1,0,0) X X X (0,1,0) = (0,0,1)?

根据叉积的计算公式为:23 32, 31 13,12 21
a × b a × b a×b = ( a 2 b 3 a₂b₃ a2b3- a 3 b 2 a₃b₂ a3b2, a 3 b 1 a₃b₁ a3b1 - a 1 b 3 a₁b₃ a1b3, a 1 b 2 a₁b₂ a1b2 - a 2 b 1 a₂b₁ a2b1)

=(0x0-0x1, 0x0-1x0, 1x1-0x0)

=(0, 0 ,1)

(然后,再强调一下,叉积和矩阵相乘是两回事!!!)

至于三维的叉积公式怎么记?可以看下图:记住23 31 自然就记住了全部了

在这里插入图片描述

因此,法线就是(0,0,1)
所以,我们完成的stl文件格式如下:solid testfacet normal 0 0 1         //我试了一下:这个法线你随便写好像也没问题outer loopvertx 0 0 0vertx 1 0 0vertx 0 1 0endloopendfacet
endsolid test

补充:关于<<我试了一下:这个法线你随便写好像也没问题>>

法线你随便写,确实还是可以正常显示stl的3d图像的,但是颜色好像变深或者变浅了

这就是涉及到法线的作用了:

STL文件中的法线向量是用于确定三角面片的朝向和光照效果的。法线向量指示了面片的表面方向,使软件能够确定如何着色和渲染模型

当你随意更改法线向量时,STL文件仍然可以显示出来,但视觉效果可能会发生变化。由于法线向量的改变,渲染引擎可能会根据新的法线方向重新计算面片的光照效果,导致颜色变深或变浅。

然而,这种方式并不代表结果是正确的或符合实际形状的。正确的法线方向对于准确显示和渲染三维模型非常重要。如果法线方向错误或不一致,可能会导致不自然的阴影、光照效果不良或渲染问题。

因此,为了正确呈现和渲染模型,请确保为每个面片定义正确的法线方向,并确保它们与实际表面法线方向相匹配。这样可以确保模型在渲染时获得更准确的外观和光照效果。

3.来个立方体

其实一组这个,就代表一个立方体facet normal ni nj nkouter loopvertex v1x v1y v1zvertex v2x v2y v2zvertex v3x v3y v3zendloop
endfacet然后一个正方形需要两组,所以就是十二组
solid testfacet normal 0 0 1outer loopvertex 0 0 0vertex 1 0 0vertex 0 1 0endloopendfacetfacet normal 0 0 1outer loopvertex 1 1 0vertex 0 1 0vertex 1 0 0endloopendfacetfacet normal 0 0 -1outer loopvertex 0 0 1vertex 0 1 1vertex 1 0 1endloopendfacetfacet normal 0 0 -1outer loopvertex 1 1 1vertex 1 0 1vertex 0 1 1endloopendfacetfacet normal 0 1 0outer loopvertex 0 1 0vertex 1 1 1vertex 0 1 1endloopendfacetfacet normal 0 1 0outer loopvertex 1 1 0vertex 0 1 0vertex 1 1 1endloopendfacetfacet normal 0 -1 0outer loopvertex 0 0 0vertex 0 0 1vertex 1 0 0endloopendfacetfacet normal 0 -1 0outer loopvertex 1 0 1vertex 1 0 0vertex 0 0 1endloopendfacetfacet normal 1 0 0outer loopvertex 1 0 0vertex 1 1 1vertex 1 0 1endloopendfacetfacet normal 1 0 0outer loopvertex 1 1 0vertex 1 0 0vertex 1 1 1endloopendfacetfacet normal -1 0 0outer loopvertex 0 0 0vertex 0 1 0vertex 0 0 1endloopendfacetfacet normal -1 0 0outer loopvertex 0 1 1vertex 0 0 1vertex 0 1 0endloopendfacet
endsolid test

在这里插入图片描述

4.最后再写一个由三个直角形组成的立方体(直棱锥)

solid Cylinderfacet normal 0.0 1.0 0.0outer loopvertex 0.0 0.0 0.0vertex 0.0 0.0 1.0vertex 1.0 0.0 0.0endloopendfacet  facet normal 0.0 0.0 1.0outer loopvertex 0.0 0.0 0.0vertex 1.0 0.0 0.0vertex 0.0 1.0 0.0endloopendfacetfacet normal 0.0 0.0 1.0outer loopvertex 0.0 0.0 0.0vertex 0.0 1.0 0.0vertex 0.0 0.0 1.0endloopendfacetfacet normal 1.0 0.0 0.0outer loopvertex 0.0 0.0 1.0vertex 1.0 0.0 0.0vertex 0.0 1.0 0.0endloopendfacetendsolid Cylinder

在这里插入图片描述

5.amend 修正(右手定则,法线向外)

每组中的三个vertex,要按逆时针排放,按照逆时针排放三个顶点组成的三角形的法向量朝外的,所以这个三个vertex的顺序有说法.

(相反,你不按逆时针排放,则法向量方向朝向里面)

vertex 0.0 1.0 0.0
vertex 0.0 0.0 0.0
vertex 0.0 0.0 1.0

然后就是: f a c e t facet facet n o r m a l normal normal 0.0 0.0 0.0 − 1.0 -1.0 1.0 0.0 0.0 0.0表示法向量,但是 s t l 格式 stl格式 stl格式似乎并没有采用这个法向量的方向,正如这个例子,不管你写成(0.0 -1.0 0.0)还是(0.0 1.0 0.0),效果都是不变的,法向量方向的确定权:取决于vertex三兄弟的顺序!

solid Cylinderfacet normal 0.0 -1.0 0.0outer loopvertex 0.0 0.0 1.0vertex 0.0 0.0 0.0vertex 1.0 0.0 0.0endloopendfacet  facet normal 0.0 0.0 -1.0outer loopvertex 1.0 0.0 0.0vertex 0.0 0.0 0.0  vertex 0.0 1.0 0.0endloopendfacetfacet normal 	-1.0 0.0 0.0outer loopvertex 0.0 1.0 0.0vertex 0.0 0.0 0.0vertex 0.0 0.0 1.0endloopendfacetfacet normal -1.0 -1.0 -1.0outer loopvertex 0.0 0.0 1.0vertex 1.0 0.0 0.0vertex 0.0 1.0 0.0endloopendfacetendsolid Cylinder
solid Cylinderfacet normal 0.0 -1.0 0.0outer loopvertex 0.0 0.0 1.0vertex 0.0 0.0 0.0vertex 1.0 0.0 0.0endloopendfacet  facet normal 0.0 0.0 -1.0outer loopvertex 1.0 0.0 0.0vertex 0.0 0.0 0.0  vertex 0.0 1.0 0.0endloopendfacetfacet normal 	-1.0 0.0 0.0outer loopvertex 0.0 1.0 0.0vertex 0.0 0.0 0.0vertex 0.0 0.0 1.0endloopendfacetfacet normal -1.0 -1.0 -1.0outer loopvertex 0.0 0.0 1.0vertex 1.0 0.0 0.0vertex 0.0 1.0 0.0endloopendfacetendsolid Cylinder

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146841.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

毛玻璃态计算器

效果展示 页面结构组成 从上述的效果可以看出&#xff0c;计算机的页面比较规整&#xff0c;适合grid布局。 CSS3 知识点 grid 布局 实现计算机布局 <div class"container"><form class"calculator" name"calc"><input type…

EasyEdge 智能边缘控制台通过sdk发布应用

离线部署SDK生成 模型部署完成后会出现下载SDK的按钮&#xff0c;点击按钮下载SDK并保存好SDK。 进入EasyDL官网的技术文档 安装智能边缘控制台 跟着教程&#xff0c;完成安装&#xff1a;点此链接 树莓派4b是Linux arm64的架构&#xff0c;点击对应的链接进行下载。 下载完成…

金融帝国实验室(CapLab)官方更新_V9.1.15版本(2023年第64次)

〖金融帝国实验室〗&#xff08;Capitalism Lab&#xff09;游戏更新记录&#xff08;2023年度&#xff09; ————————————— ◎游戏开发&#xff1a;Enlight Software Ltd.&#xff08;微启软件有限公司&#xff09; ◎官方网站&#xff1a;https://www.capitalis…

阿里云通义千问14B模型开源!性能超越Llama2等同等尺寸模型

9月25日&#xff0c;阿里云开源通义千问140亿参数模型Qwen-14B及其对话模型Qwen-14B-Chat,免费可商用。Qwen-14B在多个权威评测中超越同等规模模型&#xff0c;部分指标甚至接近Llama2-70B。阿里云此前开源了70亿参数模型Qwen-7B等&#xff0c;一个多月下载量破100万&#xff0…

【C++】笔试训练(三)

目录 一、选择题二、编程题1、字符串中找出连续最长的数字串2、数组中出现次数超过一半的数字 一、选择题 1、以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> int main() {char a[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }, * p;int i;i 8;p a i;p…

IO流之File类

File类 File 对应的硬盘上的文件或者文件夹 位于java.io包下 File对文件/文件夹进行操作&#xff0c;但是无法对文件内容进行操作&#xff0c;读取/写入不可以操作&#xff0c;但是可以创文件夹/读取文件路径,IO流才可以进行操作 文件/文件夹的路径&#xff1a;linux使用/作为文…

【红外与可见光图像融合】离散平稳小波变换域中基于离散余弦变换和局部空间频率的红外与视觉图像融合方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

音频编辑软件Steinberg SpectraLayers Pro mac中文软件介绍

Steinberg SpectraLayers Pro mac是一款专业的音频编辑软件&#xff0c;旨在帮助音频专业人士进行精细的音频编辑和声音处理。它提供了强大的频谱编辑功能&#xff0c;可以对音频文件进行深入的频谱分析和编辑。 Steinberg SpectraLayers Pro mac软件特点 1. 频谱编辑&#xff…

基于SpringBoot的知识管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户管理 文章分类 资料分类 文章信息 论坛交流 资料下载 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个…

Windows历史版本下载

1、微PE工具箱&#xff08;非广告本人常用&#xff09; 常用安装Windows系统的微PE工具 地址&#xff1a;https://www.wepe.com.cn/download.html 2、Windows系统下载地址&#xff08;非微软官方&#xff09; 地址&#xff1a;MSDN, 我告诉你 - 做一个安静的工具站 下载&…

SpringMVC的请求映射:路由请求的精准导航

SpringMVC的请求映射&#xff1a;路由请求的精准导航 SpringMVC是一个用于构建Web应用程序的强大框架&#xff0c;它提供了众多的特性和组件来简化开发过程。其中&#xff0c;请求映射是SpringMVC中的一个关键特性&#xff0c;用于将HTTP请求映射到具体的处理方法。本文将深入…

RocketMQ Dashboard说解

RocketMQ Dashboard 是 RocketMQ 的管控利器&#xff0c;为用户提供客户端和应用程序的各种事件、性能的统计信息&#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 介绍​ 功能概览​ 面板功能运维修改nameserver 地址; 选用 VIPChannel驾驶舱查看 …

基于SpringBoot的高校学科竞赛平台

目录 前言 一、技术栈 二、系统功能介绍 竞赛题库管理 竞赛信息管理 晋级名单管理 往年成绩管理 参赛申请管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步…

【信创】麒麟v10(arm)-mysql8-mongo-redis-oceanbase

Win10/Win11 借助qume模拟器安装arm64麒麟v10 前言 近两年的国产化进程一直在推进&#xff0c;基于arm架构的国产系统也在积极发展&#xff0c;这里记录一下基于麒麟v10arm版安装常见数据库的方案。 麒麟软件介绍: 银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中…

redis解压+windows安装+无法启动:1067

Redis下载安装图文教程&#xff08;Windows版_超详细&#xff09; 标题若遇到安装后无法启动&#xff1a;1067 排查方法如下&#xff1a; 1.查询是否有服务占用端口 查看6379的端口也没有被占用&#xff08;netstat -ano | findstr :6379&#xff09; 若有&#xff0c;kill掉…

【Linux】IO操作

IO 典型 IO 模型阻塞 IO非阻塞 IO信号驱动 IO异步 IO常见问题 多路转接模型select 模型poll 模型epoll 模型 典型 IO 模型 IO 操作指的就是数据的输入输出操作&#xff1b;IO 过程可以分为两个步骤&#xff1a;等待 IO 就绪、数据拷贝 阻塞 IO 发起 IO 操作&#xff0c;若当…

UE5 虚幻引擎 详解蓝图通信 必备的知识技能之一!!!

目录 0 引言1 直接蓝图通信1.1 在关卡蓝图中直接拖拽Actor1.2 Get Actor of Class/Get All Actors of Class 2 事件分发器2.1 创建事件分发器2.2 绑定事件分发器2.3 调用事件分发器 3 蓝图接口3.1 使用步骤3.2 为什么要使用蓝图接口 4 蓝图转换 0 引言 问题&#xff1a;为什么需…

图像处理与计算机视觉--第四章-图像滤波与增强-第一部分

目录 1.灰度图亮度调整 2.图像模板匹配 3.图像裁剪处理 4.图像旋转处理 5.图像邻域与数据块处理 学习计算机视觉方向的几条经验: 1.学习计算机视觉一定不能操之过急&#xff0c;不然往往事倍功半&#xff01; 2.静下心来&#xff0c;理解每一个函数/算法的过程和精髓&…

Vue中如何进行图表绘制

Vue中的图表绘制&#xff1a;数据可视化的艺术 数据可视化是现代Web应用程序的重要组成部分之一。Vue.js作为一种流行的JavaScript框架&#xff0c;提供了许多强大的工具和库&#xff0c;用于在前端应用程序中创建各种图表和数据可视化。本文将深入探讨在Vue中进行图表绘制的方…