CN109360260A - 一种三角网格三维模型的切挖重构算法 - Google Patents
一种三角网格三维模型的切挖重构算法 Download PDFInfo
- Publication number
- CN109360260A CN109360260A CN201811230637.4A CN201811230637A CN109360260A CN 109360260 A CN109360260 A CN 109360260A CN 201811230637 A CN201811230637 A CN 201811230637A CN 109360260 A CN109360260 A CN 109360260A
- Authority
- CN
- China
- Prior art keywords
- index
- threedimensional model
- vertex
- vect3
- section
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种三角网格三维模型的切挖重构算法,包括三维模型切割面的获取;切割面与三维模型的三角网格的三角边的求交;三维模型通过交点内插三维网格顶点、法线、三维纹理坐标以及三角网格索引重构排序;利用三维空间计算,获取目标被挖的三角网格序列顶点索引,剔除被挖的三角面网格序列顶点索引,重构生成新的三维网格和纹理坐标。本发明实现了三维模型指定区域的模型切挖重构,在unity三维引擎中渲染生成新的三维模型,可以非常灵活自由的改变三维模型的原始数据,让三维模型按照自己期望的方式进行分割处理,多样化的呈现在视野中,并不扰乱模型被切挖前的纹理效果,解决了现有三维引擎三维模型应用单一、不灵活、数据冗余等诸多问题。
Description
技术领域
本发明涉及三维模型重构领域,涉及一种通过选取的模型框选区间,切挖框选区间的三维模型部分,生成新的三维模型,具体说是一种三角网格三维模型的切挖重构算法。
背景技术
空间三维模型切挖算法,在三维仿真虚拟应用中得到广泛的应用,可以用在机械仿真中的磨具切挖、医疗仿真中的模拟手术刀切割、工业地下管网开挖分析土方切挖等诸多三维仿真应用领域。传统的三维应用中,都是三维美工通过三维软件制作好对应的模型,通过逻辑来对模型的整体结构进行操作、变化、渲染,但是直接对三维模型进行原始数据的计算和重组、三维模型自身数据变化应用并不广泛,还存在三维数据模型冗余、使用单一、依赖简单等诸多缺点,为了让三维应用的更广泛、更多样、更深入,通过数学计算,让三维模型数据更加丰富多彩从不同的角度呈现不同的视觉效果和视觉体验,迫切需要提供一种可以在三维空间中重组三维模型的空间数据结构,又不丢掉原有三维模型渲染的诸多特征的方法。
发明内容
本发明目的是提供一种三角网格三维模型的切挖重构算法,该方法通过改变三维模型原有数据结构特征,在三维引擎中重新渲染三维模型,让三维模型按照自己需要的展现方式呈现在屏幕中,解决了现有三维引擎三维模型应用单一、不灵活、数据冗余等诸多问题。
本发明目的通过以下技术方案实现:
一种三角网格三维模型的切挖重构算法,其特征在于:在数据结构中用链表容器装载三维模型特征值的原始数据并命名ListVts(模型顶点坐标容器)、ListTraigles(三角形索引序列容器)、ListNormal(法线容器)、ListUV(主纹理坐标容器)、ListUV1(灯光贴图纹理坐标容器),分别装载数据为顶点坐标、法线、三角形网格索引序列、主纹理坐标、灯光贴图纹理坐标;通过选取屏幕坐标序列点,映射三维模型框选区域,求取框选区域切面与三维模型的三角网格面的相交点,作为三维模型新的顶点装载在ListVts链表容器中,根据顶点坐标与法线、纹理坐标和三角形索引的内部之间的关系插入对应新的法线、纹理坐标和三角形索引序列并装载在对应的容器链表中,通过空间几何计算过滤框选区域的三维模型三角网格顶点索引,在新生成的三角网格索引序列中剔除三角形三个顶点索引都在过滤的三角网格索引序列中的索引值,将ListVts、ListTraigles、ListNormal、ListUV、ListUV1转化成unity三维引擎可以渲染的VTS(顶点坐标)、Traigles(三角形网格索引序列)、Normal(法线)、UV(主纹理贴图)、UV1(灯光纹理贴图)三维网格数据,生成新的三维模型,即为挖去框选区域的新的三维模型。
通过选取屏幕坐标序列点S0、S1、S2.....Sn(n≥2),从这些屏幕坐标中选取相邻的任意两点Sk、Sk+1(其中k为0、1、2......n-1中任意一点)转换到世界坐标Wk、Wk+1,通过世界坐标与屏幕坐标轴向的关系给定切面上的偏移Wuppset,获取坐标WC=Wk+Wuppset求得切面相交向量Wkc=Wk-WC、Wk(k+1)=Wk-Wk+1,
判断三维空间坐标轴模型的切割面,通过三维空间相交线的叉乘求取切割面的法线WN=Vect3.Cross(Wkc,Wk(k+1)),Wk作为切面定点,点和法线可以确定一个面,即为切割面,通过切割面与三维模型的三角网格面求取相交点。
求取三维模型三维网格面的相交点:
(31)将切面的法线和切面上的点转换到切割模型的相对坐标系
LN=Local(WN)、Lk=Local(Wk)(Local为世界坐标转本地坐标计算公式)
(32)判断三角形网格三角边与切面是否有相交点
如果三角边P0P1与切面相交,那么顶点P0、P1与切面定点Lk、切面法线LN满足如下关系
a=Vect3.dot(P0-Lk,LN)、b=Vect3.dot(P1-Lk,LN);
a×b<0,则P0P1与切面相交;
a×b=0,则P0P1其中一点在切面上;
a×b>0,则P0P1与切面不相交;
(33)当满足交点相交的条件后,求取三角边P0P1与切面的交点P01
如果三角边满足切面坐标系,则满足如下关系式
Vect3.dot(P01-LB,LN)=0 (0
P01.x=k(P1.x-P0.x) (1
P01.y=k(P1.y-P0.y) (2
P01.z=k(P1.z-P0.z) (3
求得交点系数
k=(LN.x×Lk.x+LN.y×Lk.y+LN.z×Lk.z)/(LN.x(P1.x-P0.x)+LN.y(P1.y-P0.y)+LN.z(P1.z-P0.z)) (4
从而求出交点P01,按照上述方法也可以求出P0P2、P1P2的交点P02、P12,将求得的交点作为三角形网格新生成的顶点。
根据交点重新排序新的网格三角形:
根据三维模型渲染的链表容器数据结构获取对应特征值的容量,表示为VTSCOUNT(网格顶点数)、NORMALCOUNT(法线数)、UVCOUNT(主UV数)、UV1COUNT(灯光贴图UV1数)、TRIANGLECOUNT(三角网格索引排序数);
三维模型三个顶点按逆时针排序为顶点P0、P1、P2,交点在01、02上,根据上述求交方法求取P01、P02;
则顶点链表容器添加新的顶点,即ListVts.add(P01),ListVts.add(P02);
顶点新增索引Index01=VTSCOUNT、Index02=VTSCOUNT+1;
如果(P0.x-P1.x)!=0
K01=(P0.x-P01.x)/(P0.x-P1.x)
K02=(P0.x-P02.x)/(P0.x-P2.x)
否则,如果(P0.y-P1.y)!=0
K01=(P0.y-P01.y)/(P0.y-P1.y)
K02=(P0.y-P02.y)/(P0.y-P2.y)
否则,如果(P0.z-P1.z)!=0
K01=(P0.z-P01.z)/(P0.z-P1.z)
K02=(P0.z-P02.z)/(P0.z-P2.z)
否则,P0、P1、P01或者P0、P2、P02重合
交点处法线、插入的主UV和灯光贴图UV1坐标
N01=K01(N1-N0)+N0
N02=K02(N2-N0)+N0
法线链表容器添加新的法线
ListNormal.add(N01)、ListNormal.add(N01)
UV01=K01(UV1-UV0)+UV0
UV02=K02(UV2-UV0)+UV0
主纹理坐标容器添加新的主纹理坐标
ListUV.add(UV01)、ListUV.add(UV02)
UV101=K01(UV11-UV10)+UV10
UV102=K02(UV12-UV10)+UV10
灯光纹理贴图链表容器添加新的灯光纹理坐标
ListUV1.add(UV101)、ListUV1.add(UV102)
则插入三个三角形索引序列为,
ListTraigles.Insert(TRIANGLECOUNT、Index01)、
ListTraigles.insert(TRIANGLECOUNT+1、Index02)、
ListTraigles.Insert(TRIANGLECOUNT+2、Index02)、
ListTraigles.Intsert(TRIANGLECOUNT+3、Index01)、
ListTraigles.Insert(TRIANGLECOUNT+5、Index01)、
ListTraigles.Insert(TRIANGLECOUNT+6、Index1)
交点在01、12上或者02、12上,同上。
求取切割模型多边形中包含的三角形顶点索引:
过滤模型顶点投影坐标在框选模型区域中的顶点索引,Pi为ListVts中框选区域平面的任意一点的投影点。
(51)求取模型顶点在多边线段上的索引
将模型上切平面上的投影面选取线段LkL(k+1)的端点,与模型上的任意顶点切面的投影点Pi进行如下计算
标准化向量
Lki=Vect3.Normalization(Lk-Pi) (1
L(k+1)i=Vect3.Normalization(Lk+1-Pi) (2
a=Vect3.Dot(Lki,L(k+1)i) (3
若a=-1,则顶点Pi在线段LkL(k+1)上,其它均在线段以外
(52)求取顶点多边形内三维空间内的索引
如果模型三顶点的投影点Pi(i=0,1,2...)在多边形切面L0L1L2L3投影点中,则满足如下关系式
L0i=Vect3.Normalization(L0-Pi) (1
L1i=Vect3.Normalization(L1-Pi) (2
L2i=Vect3.Normalization(L2-Pi) (3
L3i=Vect3.Normalization(L3-Pi) (4
将相邻向量进行叉乘
N01=Vect3.Cross(L0i,L1i) (5
N12=Vect3.Cross(L1i,L2i) (6
N23=Vect3.Cross(L2i,L3i) (7
N30=Vect3.Cross(L3i,L0i) (8
如果点在矩形内,则通过5、6、7、8求取的向量的符号得到
Vect3.SIGN(N01)=Vect3.SIGN(N12)=Vect3.SIGN(N23)
=Vect3.SIGN(N30)
(53)取多边形内包含的三角形
通过(51)、(52)筛选出在投影面多边形内部顶点的索引,通过遍历ListTraigles,如果三角形的三个索引都在由(51)、(52)求出的序列所引中,剔除索引排序TRIANGLES中该三角形三个序列,保存剩余的三角形索引排序,得到新的三角形序列TRIANGLES。
通过算法处理后将新生成网格顶点序列VTS,三角网格索引序列TRIANGLES,主UV序列UVS,灯光贴图UV1S序列,顶点插入生成的法线序列NORMALS在unity三维引擎中重新生成新的三维模型并渲染。
本发明包括三维模型切割面的获取;切割面与三维模型的三角网格的三角边的求交;三维模型通过交点内插三维网格顶点、法线、三维纹理坐标以及三角网格索引重构排序;利用三维空间计算,获取目标被挖的三角网格序列顶点索引,剔除被挖的三角面网格序列顶点索引,重构生成新的三维网格和纹理坐标。本发明实现了三维模型指定区域的模型切挖重构,在unity三维引擎中渲染生成新的三维模型。为了实现本发明的应用,需要在unity三维引擎中运行,利用三维开语言和数据结构,同时需要了解unity三维引擎三维数据的底层结构。本发明是通过数学领域的投影、求交、矩阵的叉乘、点乘、投影的二维平面内顶点与线段之间的关系、顶点与矩形的几何关系等诸多数学知识完成了对三维模型切挖的算法体系。
其中:
Unity三维开发引擎提供了三维模型处理的开发环境,编程语言和数据解构提供了三维模型的顶点、三角序列、法线、UV原始数据的构架,通过投影可以将三维数据转化到二维空间中进行计算,减少了计算的复杂度,通过叉乘和点乘可以判断顶点和切面之间的空间位置关系、同时也可以对部分数据进行归纳和分类,可以判断顶点和线段之间的关系,顶点和凸多边形之间的关系。通过三维求交可以截取三维模型原三角形的分割点,插入新的三角序列,这样在标记的框选区域内框选的三角形都是独立的,通过顶点空间关系和索引的排序,剔除这些三角形,就可以生产新的所选区域被挖空的三维模型。
本发明的有益效果是:可以非常灵活自由的改变三维模型的原始数据,让三维模型按照自己期望的方式进行分割处理,多样化的呈现在视野中,并不扰乱模型被切挖前的纹理效果,解决了现有三维引擎三维模型应用单一、不灵活、数据冗余等诸多问题。
附图说明
图1为三角网格三维模型切挖流程逻辑图;
图2为预切挖三维模型三角网格分布图;
图3为三角面分割图;
图4为算法处理后三角网格图;
图5为切挖模型图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例与实施例中的特征相互组合。下面将参考附图并结合实施例详细说明本发明。
为了使技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的实施例是基于unity三维引擎软件基础上实现平面三维地形模型的网格切挖的处理方法。
图1,三角网格三维模型切挖流程逻辑图,图2为三维模型网格未切挖前的网格,本发明在实施的过程中主要分四步实行,其中:
步骤1选择框选模型的多变形区域,构造多边形的切面:
步骤1.1在三维开发引擎中,给备选模型添加碰撞体,鼠标点击屏幕,将屏幕上选择的S0、S1、S2...Sn点,n>=2,且n个点之间按照一定顺序形成凸多边形(本实例中n为4);
步骤1.2从屏幕的这n个点发射射线,射线撞击到被切挖模型的碰撞体,标记射线投影的位置W0、W1、W2....Wn(本实例中n为4);
步骤1.3根据unity三维引擎中的坐标变换将世界坐标转化为模型的相对坐标L0、L1、L2...Ln(本实例中n为4);
步骤1.4将多边形按照一定的顺序分割成不同的线段L0L1、L1L2...LnL0,一这些线段为切面,切面定点为L0、L1、L2.....Ln(本实例中n为4)。
步骤1.5计算切面法线,通过数学公式LNi=vect3.Cross(Li,Li+1),i=1.、2...n(本实例n为4)切面法线进入下一步计算。
步骤2根据切面与三维模型的空间关系在分割的三角形中插入新的顶点、三角形索引序列、插值新的法线、主UV、灯光贴图UV1,图4为新生成的顶点、三角形面的结构图:
步骤2.1如图3将被切挖模型中的顶点、三角形索引序列、法线、主UV、灯光贴图UV1等数据通过链表容器ListVts、ListTraigles、ListNormal、ListuUV、ListUV1装载,具体实现方式依赖unity三维引擎开发语言的数据结构封装的相关接口,且其三维数据存储网格顶点数VTSCOUNT、法线数NORMALCOUNT、主UV数UVCOUNT、灯光贴图UV1数UV1COUNT、三角网格索引排序TRIANGLECOUNT;
步骤2.2选取切面线段L0L1为初始切割面,遍历切面的三角形索引序列,每三个点遍历一次,三角形被切面切割的可能性如图3所示,求取被切割的交点,并添加在三角形顶点的链表容器中,具体实现如下,当遍历到三角形第Traigles[i]、Traigles[i+1]、Traigles[i+2]个顶点
判断三角形网格三角边与切面是否有相交点
如果三角边PTraigle[0]PTraigle[1]与切面相交,顶点PTraigle[id]、PTraigle[id+1]与切面定点L0、切面法线LN0满足如下关系
a=Vect3.dot(PTraigle[0]-L0,LN0)、b=Vect3.dot(PTraigle[1]-L0,LN0);
a×b<0,则PTraigle[0]PTraigle[1]与切面相交;
a×b=0,则PTraigle[0]PTraigle[1]其中一点在切面上;
a×b>0,PTraigle[0]PTraigle[1]与切面不相交;
求取三角边PTraigle[0]PTraigle[1]与切面的交点P01
如果三角边满足切面坐标系,则满足如下关系式
Vect3.dot(P01-L0,LN0)=0 (0
P01.x=k01(PTraigle[1].x-PTraigle[0].x) (1
P01.y=k01(PTraigle[1].y-PTraigle[0].y) (2
P01.z=k01(PTraigle[1].z-PTraigle[0].z) (3
求得交点系数
k01=(LN0.x×L0.x+LN0.y×L0.y+LN0.z×L0.z)/(LN0.x(PTraigle[1].x-PTraigle[0].x)+LN0.y(PTraigle[1].y-PTraigle[0].y)+LN0.z(PTraigle[1].z-PTraigle[0].z)) (5
从而求出三角边PTraigle[0]PTraigle[1]交点P01,以此可以求出PTraigle[1]PTraigle[2]、PTraigle[2]PTraigle[0]交点P01、P02。
步骤3通过计算出来的交点改变原三维模型的数据年表容器,在图3中当交点落在01、02上时:
步骤3.1根据求取的交点P01、P02,顶点容器添加这两个交点ListVts.add(P01)、ListVts.add(P02),顶点新增索引Index01=VTSCOUNT、Index02=VTSCOUNT+1
步骤3.2在对应的相交线上,通过插值计算新的法线、主UV、灯光贴图UV1,并添加对应的索引容器中,具体实施如下
如果(PTtaigl[e].x-PTtaigle[1].x)!=0
K01=(PTtaigle[e].x-P01.x)/(PTtaigle[e].x-PTtaigle[1].x)
K02=(PTtaigle[e].x-P02.x)/(PTtaigle[e].x-PTtaigle[2].x)
否则,如果(PTtaigl[e].y-PTtaigle[1].y)!=0
K01=(PTtaigle[e].y-P01.y)/(PTtaigle[e].y-PTtaigle[1].y)
K02=(PTtaigle[e].y-P02.y)/(PTtaigle[e].y-PTtaigle[2].y)
否则,如果(PTtaigl[e].z-PTtaigle[1].z)!=0
K01=(PTtaigle[e].z-P01.z)/(PTtaigle[e].z-PTtaigle[1].z)
K02=(PTtaigle[e].z-P02.z)/(PTtaigle[e].z-PTtaigle[2].z)
否则PTtaigle[e]、PTtaigle[1]、P01或者PTtaigle[e]、PTtaigle[2]、P02重合交点处法线、插入的主UV和灯光贴图UV2坐标
N01=K01(NTtaigle[1]-NTtaigle[e])+NTtaigle[e]
N02=K02(NTtaigle[2]-NTtaigle[e])+NTtaigle[e]
ListNormal.add(N01)、ListNormal.add(N02)
UV01=K01(UVTtaigle[1]-UVTtaigle[e])+UVTtaigle[e]
UV02=K02(UVTtaigle[2]-UVTtaigle[e])+UVTtaigle[e]
ListUV.add(UV01)、ListUV.add(UV02)
UV101=K01(UV1Ttaigle[1]-UV1Ttaigle[e])+UV1Ttaigle[e]
UV102=K02(UV1Ttaigle[2]-UV1Ttaigle[e])+UV1Ttaigle[e]
ListUV1.add(UV101)、ListUV1.add(UV102)
如果三角网格被切,按照顺时针划分如图3所示的三角形区域,生成新的顶点、通过标注原有的索引序号和新的所以序号,按照三角网格原有的序列方式,重新布局新的索引序列
ListTraigles.Insert(TRIANGLECOUNT、Index01)、
ListTraigles.insert(TRIANGLECOUNT+1、Index02)、
ListTraigles.Insert(TRIANGLECOUNT+2、Index02)、
ListTraigles.Intsert(TRIANGLECOUNT+3、Index01)、
ListTraigles.Insert(TRIANGLECOUNT+5、Index01)、
ListTraigles.Insert(TRIANGLECOUNT+6、Index1)
如果交点落在01、12或者02、12上处理方式同上
步骤3.3将添加后的顶点、三角形顶点序列、法线、主UV、灯光贴图UV1对应的容器作为下一个切面的容器继续进行上述计算,按照顺序L1L2...LnL0处理完所有的切面。
步骤4通过上面的计算和处理,可以得到新的顶点、三角形顶点序列、法线、主UV、灯光贴图UV1的容器链表,剔除被挖部分的三角形索引,处理方式如下:
步骤4.1求取框选区域的三角形顶点的索引集合,主要分两步求取在框选区域线段上的顶点索引和求取在框选区域内的顶点索引,并添加到同一个集合中,为剔除顶点集合ArrankInner。
过滤模型顶点投影坐标在框选模型区域中的顶点索引,Pi为ListVts中框选区域平面的任意一点的投影点。
将模型上切平面上的投影面选取线段L0L1的端点L0、L1,与模型上的任意顶点切面的投影点Pi进行如下计算:
标准化向量
L0i=Vect3.Normalization(L0-Pi) (1
L1i=Vect3.Normalization(L1-Pi) (2
a=Vect3.Dot(L0i,L1i) (3
若a=-1,则顶点Pi在线段L0L1上,ArrankInner.add(i)其它均在线段以外,以此类推可以判断P1是否在L0L1、L1L2...LnL0上。
求取顶点多边形内三维空间内的索引
如果模型三顶点的投影点Pi(i=0,1,2...)在多边形切挖面投影点中,则满足如下关系式
L0i=Vect3.Normalization(L0-Pi) (1
L1i=Vect3.Normalization(L1-Pi) (2
L2i=Vect3.Normalization(L2-Pi) (3
......
Lni=Vect3.Normalization(Ln-Pi) (n
将相邻向量进行叉乘
N01=Vect3.Cross(L0i,L1i) (n+1
N12=Vect3.Cross(L1i,L2i) (n+2
......
Nn0=Vect3.Cross(Lni,L0i) (2n
如果点在矩形内,则通过n+1、n+2....2n求取的向量的符号得到
Vect3.SIGN(N01)=Vect3.SIGN(N12)=......=Vect3.SIGN(Nn0)ArrankInner.add(i)。
步骤4.2遍历三维模型新生成的ListTraigles,判断三角形的三个顶点集合是否都在剔除的顶点集合ArrankInner中,如果是则将这三个顶点索引全都剔除掉,ListTraigles.RemoveAt(id)、ListTraigles.RemoveAt(id+1)、ListTraigles.RemoveAt(id+2),如图4所示。
步骤4.3将剔除后的三角形顶点序列容器链表、三维模型新生成的顶点坐标容器链表、法线容器链表、主UV和灯光贴图UV1的容器链表转化成unity三维引擎可以识别构造三维模型网格的数据数组,从而生产新的三维模型如图5所示。
Claims (6)
1.一种三角网格三维模型的切挖重构算法,其特征在于:在数据结构中用链表容器装载三维模型的特征值原始数据并命名ListVts、ListTraigles、ListNormal、ListUV、ListUV1,分别装载数据为顶点坐标、法线、三角形网格索引序列、主纹理坐标、灯光贴图纹理坐标;通过选取屏幕坐标序列点,映射三维模型框选区域,求取框选区域切面与三维模型的三角网格面的相交点,作为三维模型新的顶点装载在ListVts链表容器中,根据顶点坐标与法线、纹理坐标和三角形索引的内部之间的关系插入对应新的法线、纹理坐标和三角形索引序列并装载在对应的容器链表中,通过空间几何计算过滤框选区域的三维模型三角网格顶点索引,在新生成的三角网格索引序列中剔除三角形三个顶点索引都在过滤的三角网格索引序列中的索引值,将ListVts、ListTraigles、ListNormal、ListUV、ListUV1转化成unity三维引擎渲染的VTS、Traigles、Normal、UV、UV1三维网格数据,生成新的三维模型,即为挖去框选区域的新的三维模型。
2.根据权利要求1所述的三角网格三维模型的切挖重构算法,其特征在于:通过选取屏幕坐标序列点S0、S1、S2…..Sn,n≥2,从这些屏幕坐标中选取相邻的任意两点Sk、Sk+1,其中k为0、1、2……n-1中任意一点,转换到世界坐标Wk、Wk+1,通过世界坐标与屏幕坐标轴向的关系给定切面上的偏移Wuppset,获取坐标WC=Wk+Wuppset求得切面相交向量Wkc=Wk-WC、Wk(k+1)=Wk-Wk+1,
判断三维空间坐标轴模型的切割面,通过三维空间相交线的叉乘求取切割面的法线WN=Vect3.Cross(Wkc,Wk(k+1)),Wk作为切面定点,点和法线可以确定一个面,即为切割面,通过切割面与三维模型的三角网格面求取相交点。
3.根据权利要求2所述的三角网格三维模型的切挖重构算法,其特征在于:求取三维模型三维网格面的相交点具体如下:
(31)将切面的法线和切面上的点转换到切割模型的相对坐标系
LN=Local(WN)、Lk=Local(Wk),Local为世界坐标转本地坐标计算公式;
(32)判断三角形网格三角边与切面是否有相交点
如果三角边P0P1与切面相交,那么顶点P0、P1与切面定点Lk、切面法线LN满足如下关系
a=Vect3.dot(P0-Lk,LN)、b=Vect3.dot(P1-Lk,LN);
a×b<0,则P0P1与切面相交;
a×b=0,则P0P1其中一点在切面上;
a×b>0,则P0P1与切面不相交;
(33)当满足交点相交的条件后,求取三角边P0P1与切面的交点P01
如果三角边满足切面坐标系,则满足如下关系式
Vect3.dot(P01-LB,LN)=0 (0
P01·x=k(P1·x-P0·x) (1
P01·y=k(P1·y-P0·y) (2
P01·z=k(P1·z-P0·z) (3
求得交点系数
k=(LN·x×Lk·x+LN·y×Lk·y+LN·z×Lk·z)/(LN·x(P1·x-P0·x)+LN·y(P1·y-P0·y)+LN·z(P1·z-P0·z)) (4
从而求出交点P01,按照上述方法也可以求出P0P2、P1P2的交点P02、P12,将求得的交点作为三角形网格新生成的顶点。
4.根据权利要求3所述的三角网格三维模型的切挖重构算法,其特征在于:根据交点重新排序新的网格三角形:
根据三维模型渲染的链表容器数据结构获取对应特征值的容量,表示为VTSCOUNT、NORMALCOUNT、UVCOUNT、UV1COUNT、TRIANGLECOUNT;
三维模型三个顶点按逆时针排序为顶点P0、P1、P2,交点在01、02上,求交点P01、P02,则顶点链表容器添加新的顶点,即ListVts.add(P01),ListVts.add(P02);
顶点新增索引Index01=VTSCOUNT、Index02=VTSCOUNT+1
如果(P0·x-P1·x)!=0
K01=(P0·x-P01·x)/(P0·x-P1·x)
K02=(P0·x-P02·x)/(P0·x-P2·x)
否则,如果(P0·y-P1·y)!=0
K01=(P0·y-P01·y)/(P0·y-P1·y)
K02=(P0·y-P02·y)/(P0·y-P2·y)
否则,如果(P0·z-P1·z)!=0
K01=(P0·z-P01·z)/(P0·z-P1·z)
K02=(P0·z-P02·z)/(P0·z-P2·z)
否则,P0、P1、P01或者P0、P2、P02重合,
交点处法线、插入的主UV和灯光贴图UV1坐标
N01=K01(N1-N0)+N0
N02=K02(N2-N0)+N0
法线链表容器添加新的法线
ListNormal.add(N01)、ListNormal.add(N01)
UV01=K01(UV1-UV0)+UV0
UV02=K02(UV2-UV0)+UV0
主纹理坐标容器添加新的主纹理坐标
ListUV.add(UV01)、ListUV.add(UV02)
UV101=K01(UV11-UV10)+UV10
UV102=K02(UV12-UV10)+UV10
灯光纹理贴图链表容器添加新的灯光纹理坐标
ListUV1.add(UV101)、ListUV1.add(UV102)
则插入三个三角形索引序列为,
ListTraigles.Insert(TRIANGLECOUNT、Index01)、
ListTraigles.insert(TRIANGLECOUNT+1、Index02)、
ListTraigles.Insert(TRIANGLECOUNT+2、Index02)、
ListTraigles.Intsert(TRIANGLECOUNT+3、Index01)、
ListTraigles.Insert(TRIANGLECOUNT+5、Index01)、
ListTraigles.Insert(TRIANGLECOUNT+6、Index1)
交点在01、12上或者02、12上,同上。
5.根据权利要求1所述的三角网格三维模型的切挖重构算法,其特征在于,求取切割模型多边形中包含的三角形顶点索引:
过滤模型顶点投影坐标在框选模型区域中的顶点索引,Pi为ListVts中框选区域平面的任意一点的投影点;
(51)求取模型顶点在多边线段上的索引
将模型上切平面上的投影面选取线段LkL(k+1)的端点,与模型上的任意顶点切面的投影点Pi进行如下计算
标准化向量
Lki=Vect3.Normalization(Lk-Pi) (1
L(k+1)i=Vect3.Normalization(Lk+1-Pi) (2
a=Vect3.Dot(Lki,L(k+1)i) (3
若a=-1,则顶点Pi在线段LkL(k+1)上,其它均在线段以外
(52)求取顶点多边形内三维空间内的索引
如果模型三顶点的投影点Pi(i=0,1,2…)在多边形切面L0L1L2L3投影点中,则满足如下关系式
L0i=Vect3.Normalization(L0-Pi) (1
L1i=Vect3.Normalization(L1-Pi) (2
L2i=Vect3.Normalization(L2-Pi) (3
L3i=Vect3.Normalization(L3-Pi) (4
将相邻向量进行叉乘
N01=Vect3.Cross(L0i,L1i) (5
N12=Vect3.Cross(L1i,L2i) (6
N23=Vect3.Cross(L2i,L3i) (7
N30=Vect3.Cross(L3i,L0i) (8
如果点在矩形内,则通过(5、(6、(7、(8求取的向量的符号得到Vect3.SIGN(N01)=Vect3.SIGN(N12)=Vect3.SIGN(N23)=Vect3.SIGN(N30);
(53)取多边形内包含的三角形
通过(51)、(52)筛选出在投影面多边形内部顶点的索引,通过遍历ListTraigles,如果三角形的三个索引都在由(51)、(52)求出的序列所引中,剔除索引排序TRIANGLES中该三角形三个序列,保存剩余的三角形索引排序,得到新的三角形序列TRIANGLES。
6.根据权利要求1所述的三角网格三维模型的切挖重构算法,其特征在于,重构渲染新的三维模型:
通过算法处理后将新生成网格顶点序列VTS,三角网格索引序列TRIANGLES,主UV序列UVS,灯光贴图UV1S序列,顶点插入生成的法线序列NORMALS在unity三维引擎中重新生成新的三维模型并渲染。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811230637.4A CN109360260B (zh) | 2018-10-22 | 2018-10-22 | 一种三角网格三维模型的切挖重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811230637.4A CN109360260B (zh) | 2018-10-22 | 2018-10-22 | 一种三角网格三维模型的切挖重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109360260A true CN109360260A (zh) | 2019-02-19 |
CN109360260B CN109360260B (zh) | 2023-07-18 |
Family
ID=65346048
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811230637.4A Active CN109360260B (zh) | 2018-10-22 | 2018-10-22 | 一种三角网格三维模型的切挖重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109360260B (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109785420A (zh) * | 2019-03-19 | 2019-05-21 | 厦门市思芯微科技有限公司 | 一种基于Unity引擎的3D场景拾色方法及系统 |
CN110111416A (zh) * | 2019-05-07 | 2019-08-09 | 西安科技大学 | 基于HoloLens眼镜的矿井内部模型采集建立方法 |
CN110223372A (zh) * | 2019-06-13 | 2019-09-10 | 网易(杭州)网络有限公司 | 模型渲染的方法、装置、设备及存储介质 |
CN110363845A (zh) * | 2019-07-22 | 2019-10-22 | 南京聚润工程科技有限公司 | 一种bim三维模型分减面存储并重构的方法及系统 |
CN110389557A (zh) * | 2019-07-22 | 2019-10-29 | 深圳趣途科技有限责任公司 | 模型剖切方法、计算机可读存储介质、模型剖切装置 |
CN110490921A (zh) * | 2019-08-05 | 2019-11-22 | 合肥工业大学 | 一种三维gis数据的采集与处理方法 |
CN110503723A (zh) * | 2019-07-13 | 2019-11-26 | 北京航空航天大学 | 一种牙列缺损数字模型观测线的确定方法 |
CN110599594A (zh) * | 2019-07-29 | 2019-12-20 | 成都理工大学 | 一种岩石物性结构三维建模的方法 |
CN110633517A (zh) * | 2019-09-03 | 2019-12-31 | 江西博微新技术有限公司 | 一种用于三维场景的高效切片方法 |
CN110989886A (zh) * | 2019-11-29 | 2020-04-10 | 广州海格星航信息科技有限公司 | 基于空间地图的三维空间网格选取方法及装置 |
CN111145356A (zh) * | 2019-12-31 | 2020-05-12 | 威创集团股份有限公司 | 一种基于Unity3D模型的切割方法 |
CN111292422A (zh) * | 2020-03-02 | 2020-06-16 | 上海索辰信息科技有限公司 | 一种基于曲面法线改进网格生成质量的方法 |
CN111932689A (zh) * | 2020-07-03 | 2020-11-13 | 北京庚图科技有限公司 | 一种采用id像素图的三维对象快速选取方法 |
CN112569602A (zh) * | 2020-12-25 | 2021-03-30 | 珠海金山网络游戏科技有限公司 | 在虚拟场景中构建地形的方法及装置 |
CN112906241A (zh) * | 2021-03-17 | 2021-06-04 | 青岛慧拓智能机器有限公司 | 矿区自动驾驶仿真模型构建方法、装置、介质及电子设备 |
CN113724401A (zh) * | 2021-09-02 | 2021-11-30 | 广州点金石信息技术有限公司 | 一种三维模型切割方法、装置、计算机设备和存储介质 |
CN114722688A (zh) * | 2022-06-07 | 2022-07-08 | 中国城市规划设计研究院(住房和城乡建设部遥感应用中心) | 一种三维建筑模型自动分层方法 |
CN118037992A (zh) * | 2024-02-28 | 2024-05-14 | 北京四维远见信息技术有限公司 | 一种三角网局部重构方法、系统、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101271592A (zh) * | 2008-04-03 | 2008-09-24 | 上海交通大学 | 基于aif的三角形网格切割重建方法 |
CN101441780A (zh) * | 2008-11-05 | 2009-05-27 | 武汉大学 | 三维网格模型的剖切方法 |
WO2010103942A1 (ja) * | 2009-03-09 | 2010-09-16 | カルソニックカンセイ株式会社 | 表面加工データの作成方法および装置 |
CN103413297A (zh) * | 2013-07-16 | 2013-11-27 | 南京师范大学 | 基于一体化三维gis模型的切割方法 |
CN105184851A (zh) * | 2015-07-13 | 2015-12-23 | 西南科技大学 | 一种用于高放废物处置库三维网格模型的快速剖切方法 |
-
2018
- 2018-10-22 CN CN201811230637.4A patent/CN109360260B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101271592A (zh) * | 2008-04-03 | 2008-09-24 | 上海交通大学 | 基于aif的三角形网格切割重建方法 |
CN101441780A (zh) * | 2008-11-05 | 2009-05-27 | 武汉大学 | 三维网格模型的剖切方法 |
WO2010103942A1 (ja) * | 2009-03-09 | 2010-09-16 | カルソニックカンセイ株式会社 | 表面加工データの作成方法および装置 |
CN103413297A (zh) * | 2013-07-16 | 2013-11-27 | 南京师范大学 | 基于一体化三维gis模型的切割方法 |
CN105184851A (zh) * | 2015-07-13 | 2015-12-23 | 西南科技大学 | 一种用于高放废物处置库三维网格模型的快速剖切方法 |
Cited By (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109785420B (zh) * | 2019-03-19 | 2023-08-04 | 厦门市思芯微科技有限公司 | 一种基于Unity引擎的3D场景拾色方法及系统 |
CN109785420A (zh) * | 2019-03-19 | 2019-05-21 | 厦门市思芯微科技有限公司 | 一种基于Unity引擎的3D场景拾色方法及系统 |
CN110111416A (zh) * | 2019-05-07 | 2019-08-09 | 西安科技大学 | 基于HoloLens眼镜的矿井内部模型采集建立方法 |
CN110111416B (zh) * | 2019-05-07 | 2024-03-08 | 武汉安辰鑫信息科技有限公司 | 基于HoloLens眼镜的矿井内部模型采集建立方法 |
CN110223372A (zh) * | 2019-06-13 | 2019-09-10 | 网易(杭州)网络有限公司 | 模型渲染的方法、装置、设备及存储介质 |
CN110503723B (zh) * | 2019-07-13 | 2020-12-15 | 北京航空航天大学 | 一种牙列缺损数字模型观测线的确定方法 |
CN110503723A (zh) * | 2019-07-13 | 2019-11-26 | 北京航空航天大学 | 一种牙列缺损数字模型观测线的确定方法 |
CN110363845A (zh) * | 2019-07-22 | 2019-10-22 | 南京聚润工程科技有限公司 | 一种bim三维模型分减面存储并重构的方法及系统 |
CN110389557A (zh) * | 2019-07-22 | 2019-10-29 | 深圳趣途科技有限责任公司 | 模型剖切方法、计算机可读存储介质、模型剖切装置 |
CN110599594A (zh) * | 2019-07-29 | 2019-12-20 | 成都理工大学 | 一种岩石物性结构三维建模的方法 |
CN110599594B (zh) * | 2019-07-29 | 2021-07-20 | 成都理工大学 | 一种岩石物性结构三维建模的方法 |
CN110490921A (zh) * | 2019-08-05 | 2019-11-22 | 合肥工业大学 | 一种三维gis数据的采集与处理方法 |
CN110633517A (zh) * | 2019-09-03 | 2019-12-31 | 江西博微新技术有限公司 | 一种用于三维场景的高效切片方法 |
CN110633517B (zh) * | 2019-09-03 | 2023-07-25 | 江西博微新技术有限公司 | 一种用于三维场景的高效切片方法 |
CN110989886A (zh) * | 2019-11-29 | 2020-04-10 | 广州海格星航信息科技有限公司 | 基于空间地图的三维空间网格选取方法及装置 |
CN110989886B (zh) * | 2019-11-29 | 2022-05-27 | 广州海格星航信息科技有限公司 | 基于空间地图的三维空间网格选取方法及装置 |
CN111145356A (zh) * | 2019-12-31 | 2020-05-12 | 威创集团股份有限公司 | 一种基于Unity3D模型的切割方法 |
CN111145356B (zh) * | 2019-12-31 | 2023-08-18 | 威创集团股份有限公司 | 一种基于Unity3D模型的切割方法 |
CN111292422A (zh) * | 2020-03-02 | 2020-06-16 | 上海索辰信息科技有限公司 | 一种基于曲面法线改进网格生成质量的方法 |
CN111932689A (zh) * | 2020-07-03 | 2020-11-13 | 北京庚图科技有限公司 | 一种采用id像素图的三维对象快速选取方法 |
CN111932689B (zh) * | 2020-07-03 | 2023-11-14 | 北京庚图科技有限公司 | 一种采用id像素图的三维对象快速选取方法 |
CN112569602A (zh) * | 2020-12-25 | 2021-03-30 | 珠海金山网络游戏科技有限公司 | 在虚拟场景中构建地形的方法及装置 |
CN112569602B (zh) * | 2020-12-25 | 2022-08-30 | 珠海金山数字网络科技有限公司 | 在虚拟场景中构建地形的方法及装置 |
CN112906241B (zh) * | 2021-03-17 | 2023-07-04 | 青岛慧拓智能机器有限公司 | 矿区自动驾驶仿真模型构建方法、装置、介质及电子设备 |
CN112906241A (zh) * | 2021-03-17 | 2021-06-04 | 青岛慧拓智能机器有限公司 | 矿区自动驾驶仿真模型构建方法、装置、介质及电子设备 |
CN113724401A (zh) * | 2021-09-02 | 2021-11-30 | 广州点金石信息技术有限公司 | 一种三维模型切割方法、装置、计算机设备和存储介质 |
CN113724401B (zh) * | 2021-09-02 | 2023-12-15 | 广州点金石信息技术有限公司 | 一种三维模型切割方法、装置、计算机设备和存储介质 |
CN114722688B (zh) * | 2022-06-07 | 2022-08-26 | 中国城市规划设计研究院(住房和城乡建设部遥感应用中心) | 一种三维建筑模型自动分层方法 |
CN114722688A (zh) * | 2022-06-07 | 2022-07-08 | 中国城市规划设计研究院(住房和城乡建设部遥感应用中心) | 一种三维建筑模型自动分层方法 |
CN118037992A (zh) * | 2024-02-28 | 2024-05-14 | 北京四维远见信息技术有限公司 | 一种三角网局部重构方法、系统、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109360260B (zh) | 2023-07-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109360260A (zh) | 一种三角网格三维模型的切挖重构算法 | |
CN108776993B (zh) | 带有孔洞的三维点云的建模方法及地下电缆工井建模方法 | |
CN109377561A (zh) | 一种基于共形几何的数模表面网格生成方法 | |
De Floriani et al. | A survey on data structures for level-of-detail models | |
CN101719140B (zh) | 一种图形检索方法 | |
Zheng et al. | Three-dimensional unstructured mesh generation: Part 2. Surface meshes | |
CN109685914A (zh) | 基于三角网格模型的剖切轮廓自动补面算法 | |
Cavalcanti et al. | Non-manifold modelling: an approach based on spatial subdivision | |
CN107045733A (zh) | 基于点云数据对变电站gis设备进行建模的方法 | |
CN102629391A (zh) | 基于数字图形介质的三维空间结构图形切割及切片方法 | |
CN115661374B (zh) | 一种基于空间划分和模型体素化的快速检索方法 | |
Gold | Tessellations in GIS: Part I—putting it all together | |
CN101216863A (zh) | 一种处理服装热舒适度的三维可视化方法 | |
CN104392489B (zh) | 顾及拓扑的三维地理空间实体群的线消隐方法 | |
Wolf | Scale independent surface characterisation: Geography meets precision surface metrology | |
CN105653881A (zh) | 基于多密度层次的流场可视化方法 | |
Fritsch | Three-dimensional geographic information systems-status and prospects | |
US11214008B2 (en) | Three-dimensional object formation instruction apparatus, three-dimensional object production method, and program | |
CN108510579B (zh) | 一种工业复杂裁剪曲面的渲染显示方法 | |
Velho | Quasi 4–8 subdivision | |
CN107767458B (zh) | 不规则三角网曲面几何拓扑一致分析方法及系统 | |
CN110532670A (zh) | 一种适分析样条实体模型构建方法及系统 | |
CN110322548A (zh) | 一种基于几何图像参数化的三维网格模型生成方法 | |
CN100440258C (zh) | 地层和断层数据网格自动生成的系统和方法 | |
Crossno et al. | Visual debugging of visualization software: a case study for particle systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: No.1266 qingshuiting East Road, moling street, Jiangning District, Nanjing City, Jiangsu Province Applicant after: Nanjing Keyuan Intelligent Technology Group Co.,Ltd. Applicant after: NANJING ELECTRIC POWER PLANT OF DATANG Group Address before: No.1266 qingshuiting East Road, moling street, Jiangning District, Nanjing City, Jiangsu Province Applicant before: NANJING SCIYON AUTOMATION GROUP Co.,Ltd. Applicant before: NANJING ELECTRIC POWER PLANT OF DATANG Group |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |