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.rhkb.cn/news/144127.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何定时备份使用Docker构建的MySQL容器中的数据库

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

单目标应用:基于螳螂搜索算法(Mantis Search Algorithm,MSA)的微电网优化调度MATLAB

一、螳螂搜索算法 螳螂搜索算法&#xff08;Mantis Search Algorithm&#xff0c;MSA&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟螳螂独特的狩猎和性同类相食行为。MSA由三个优化阶段组成&#xff0c;包括寻找猎物&#xff08;探索&#xff09…

OpenHarmony自定义组件介绍

一、创建自定义组件 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑…

Windows 下安装和配置 Redis (详细图文)

目录 下载 Redis安装 Redis配置 Redis修改密码(可选)配置环境变量注册系统服务 Redis 桌面管理工具附&#xff1a;开源项目微服务商城项目前后端分离项目 下载 Redis 访问 Redis 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 下载 Redis 时&#xff0c…

Golang的测试、基准测试和持续集成

在Golang中&#xff0c;内置的垃圾回收器处理内存管理&#xff0c;自动执行内存分配和释放。 单元测试是软件开发中至关重要的一个方面&#xff0c;它确保了代码的正确性并在开发过程中尽早发现错误。在Go中&#xff0c;编写有效的单元测试非常简单&#xff0c;并为开发人员提…

Bee2.1.8支持Spring Boot 3.0.11,active命令行选择多环境,多表查改增删(bee-spring-boot发布,更新maven)

天下大势&#xff0c;分久必合&#xff01; Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) Bee Spring Cloud 微服务使用数据库更方便&#xff1a;Bee Spring Boot; 轻松支持多数据源&#xff0c;Sharding, Mongodb. 要整合一堆的…

【Java 进阶篇】深入理解 SQL 聚合函数

在 SQL 数据库中&#xff0c;聚合函数是一组强大的工具&#xff0c;用于处理和分析数据。它们可以帮助您对数据进行统计、计算总和、平均值、最大值、最小值等操作。无论您是数据库开发者、数据分析师还是希望更好地了解 SQL 数据库的用户&#xff0c;了解聚合函数都是非常重要…

【算法练习Day8】 kmp算法找出字符串中第一个匹配项的下标反转字符串中的单词重复的子字符串

、​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 kmp算法找出字符串中第…

ubuntu18.04 OpenGL开发(显示YUV)

源码参考&#xff1a;https://download.csdn.net/download/weixin_55163060/88382816 安装opengl库 sudo apt install libglu1-mesa-dev freeglut3-dev mesa-common-dev 安装opengl工具包 sudo apt install mesa-utils 检查opengl版本信息&#xff08;桌面终端执行&#xff09…

UWB技术在汽车智能制造的应用

返修区车辆管理项目 应用背景 在车辆总装生产线中&#xff0c;车辆下线后检测与返修是最后一个关键环节&#xff0c;整车一旦下线&#xff0c;由于流水线装配工艺、来料等原因&#xff0c;可能会出现部分整车存在瑕疵&#xff0c;进而进入返修区域待检。由于可能出现问题的不确…

【EI会议征稿】第三届机械、建模与材料工程国际学术会议(I3ME 2023)

第三届机械、建模与材料工程国际学术会议&#xff08;I3ME 2023&#xff09; 2023 3rd International Conference on Mechanical, Modeling and Materials Engineering 第三届机械、建模与材料工程国际学术会议&#xff08;I3ME 2023&#xff09;将于2023年12月1-3日在中国长春…

五子棋AI算法和开局定式(直指13式)破解

五子棋AI算法和开局定式&#xff08; 直指13式 &#xff09;破解 先前发了几篇五子棋游戏程序设计的博文&#xff0c;设计了游戏程序&#xff0c;也设计了AI智能奕棋的算法&#xff0c;运行程序检测算法的可行性&#xff0c;完成人机模式游戏功能的设置。这还不够&#xff0c;…

十六.镜头知识之工业镜头的质量判断因素

十六.镜头知识之工业镜头的质量判断因素 文章目录 十六.镜头知识之工业镜头的质量判断因素1.分辨率(Resolution)2.明锐度(Acutance)3.景深(DOF)&#xff1a;4. 最大相对孔径与光圈系数5.工业镜头各参数间的相互影响关系5.1.焦距大小的影响情况5.2.光圈大小的影响情况5.3.像场中…

WebPack5进阶使用总结(二)

WebPack5进阶使用总结 1、处理js资源1.1、Eslint1.2、在webpack中使用Eslint1.3、Babel1.4、在webpack中使用 2、处理HTML资源3、开发服务器&自动化4、生产模式介绍5、Css处理5.1、Css兼容性处理5.2、合并配置5.3、Css压缩 配套视频&#xff1a;尚硅谷Webpack5入门到原理 配…

STM32H7系列MPU与CACHE以及RAM

一、启用cache 启用cache很简单&#xff0c;就是这两句&#xff0c;分别打开I-Cache和D-Cache&#xff0c;但是如果只使用这两句&#xff0c;再操作DMA和FLASH时就很有可能遇到问题&#xff0c;后面会具体说明。 SCB_EnableICache();//使能I-CacheSCB_EnableDCache();//使能D-…

Android studio “Layout Inspector“工具在Android14 userdebug设备无法正常使用

背景描述 做rom开发的都知道&#xff0c;“Layout Inspector”和“Attach Debugger to Android Process”是studio里很好用的工具&#xff0c;可以用来查看布局、调试系统进程&#xff08;比如setting、launcher、systemui&#xff09;。 问题描述 最进刚开始一个Android 14…

现代数据架构-湖仓一体

当前的数据架构已经从数据库、数据仓库&#xff0c;发展到了数据湖、湖仓一体架构&#xff0c;本篇文章从头梳理了一下数据行业发展的脉络。 上世纪&#xff0c;最早出现了关系型数据库&#xff0c;也就是DBMS&#xff0c;有商业的Oracle、 IBM的DB2、Sybase、Informix、 微软…

【数据结构初阶】六、线性表中的队列(链式结构实现队列)

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 【数据结构初阶】五、线性表中的栈&#xff08;顺序表实现栈&#xff09;_高高的胖子的博客-CSDN博客 1 . 队列&#xff08;Queue&#xff09; 队列的概念和结构&#xff1a; 队列…

PSINS工具箱学习(一)下载安装初始化、SINS-GPS组合导航仿真、习惯约定与常用变量符号、数据导入转换、绘图显示

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 一、前言二、相关资源三、下载安装初始化1、下载PSINSyymmdd.rar工具箱文件2、解压文件3、初始化4、启动工具箱导览 四、习惯约定与常用变量符号1…

数据集笔记:2015上海地铁一卡通数据

数据地址&#xff1a;上海地铁数据_免费高速下载|百度网盘-分享无限制 (baidu.com) 数据介绍 上海2015年几天的地铁一卡通出入站信息 卡号、交易日期、交易时间、公交线路/地铁站点中文名称、行业名称(公交、地铁、出租、轮渡、PR停车场)、交易金额、交易性质(非优惠、优惠、…