CN112767526B - 一种适用于纹理贴图的浮雕网格重构方法 - Google Patents
一种适用于纹理贴图的浮雕网格重构方法 Download PDFInfo
- Publication number
- CN112767526B CN112767526B CN202110148219.6A CN202110148219A CN112767526B CN 112767526 B CN112767526 B CN 112767526B CN 202110148219 A CN202110148219 A CN 202110148219A CN 112767526 B CN112767526 B CN 112767526B
- Authority
- CN
- China
- Prior art keywords
- vertex
- edge
- patch
- grid
- mesh
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 51
- 238000013507 mapping Methods 0.000 title claims abstract description 31
- 238000005070 sampling Methods 0.000 claims abstract description 127
- 230000008859 change Effects 0.000 claims description 28
- 230000008569 process Effects 0.000 claims description 17
- 238000002372 labelling Methods 0.000 claims description 8
- 101100460203 Schizosaccharomyces pombe (strain 972 / ATCC 24843) new2 gene Proteins 0.000 claims description 7
- 101100273916 Schizosaccharomyces pombe (strain 972 / ATCC 24843) wip1 gene Proteins 0.000 claims description 7
- 238000003780 insertion Methods 0.000 claims description 6
- 230000037431 insertion Effects 0.000 claims description 6
- 238000010606 normalization Methods 0.000 claims description 6
- 239000005557 antagonist Substances 0.000 claims description 5
- 238000012217 deletion Methods 0.000 claims description 5
- 230000037430 deletion Effects 0.000 claims description 5
- 238000010276 construction Methods 0.000 claims description 4
- 230000005484 gravity Effects 0.000 claims description 3
- 238000009826 distribution Methods 0.000 claims description 2
- 238000006386 neutralization reaction Methods 0.000 claims description 2
- 230000000694 effects Effects 0.000 abstract description 5
- 238000011960 computer-aided design Methods 0.000 abstract description 2
- 238000013461 design Methods 0.000 abstract description 2
- 238000004519 manufacturing process Methods 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 14
- 101100167780 Schizosaccharomyces pombe (strain 972 / ATCC 24843) coa2 gene Proteins 0.000 description 2
- 101100390985 Schizosaccharomyces pombe (strain 972 / ATCC 24843) fmc1 gene Proteins 0.000 description 2
- 101100460204 Schizosaccharomyces pombe (strain 972 / ATCC 24843) new4 gene Proteins 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- VZSRBBMJRBPUNF-UHFFFAOYSA-N 2-(2,3-dihydro-1H-inden-2-ylamino)-N-[3-oxo-3-(2,4,6,7-tetrahydrotriazolo[4,5-c]pyridin-5-yl)propyl]pyrimidine-5-carboxamide Chemical compound C1C(CC2=CC=CC=C12)NC1=NC=C(C=N1)C(=O)NCCC(N1CC2=C(CC1)NN=N2)=O VZSRBBMJRBPUNF-UHFFFAOYSA-N 0.000 description 1
- WFKSADNZWSKCRZ-UHFFFAOYSA-N Diethatyl-ethyl Chemical compound CCOC(=O)CN(C(=O)CCl)C1=C(CC)C=CC=C1CC WFKSADNZWSKCRZ-UHFFFAOYSA-N 0.000 description 1
- 241001394244 Planea Species 0.000 description 1
- 239000000370 acceptor Substances 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
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)
- Image Generation (AREA)
Abstract
本发明属于计算机辅助设计、工业设计制造技术领域,提供了一种适用于纹理贴图的浮雕网格重构方法。首先,根据导入的纹理图像边缘采样,对由导入的模型文件数据构建的三角网格,进行网格细分。然后,通过网格生成,重构浮雕边缘网格和浮雕表面网格。最后导出网格重构后的模型文件,完成浮雕网格重构。与普通网格重构方法相比,该方法减少了不必要顶点的生成,效率更高,而且能展现浮雕更多的细节,效果更好。
Description
技术领域
本发明属于计算机辅助设计、工业设计制造技术领域,涉及一种适用于纹理贴图的浮雕网格重构方法。
背景技术
将图片转化为模型上三维浮雕网格常见的方法是先将网格等面积重构,细分,然后通过建立模型顶点与图像像素的映射,调整顶点位置以实现浮雕网格重构。然而这种方法会生成很多不必要顶点,不仅影响浮雕网格重构效率,浪费计算机存储空间,而且精度上不够高,影响浮雕网格效果。
本发明提出的适用于纹理贴图的浮雕网格重构方法具有实现容易,效率高,效果好等诸多优点,非常适用于浮雕网格建模。
发明内容
为解决上述问题,本发明提出一种适用于纹理贴图的浮雕网格重构方法,流程如图1所示。首先,根据导入的纹理图像边缘采样,对由导入的模型文件数据构建的三角网格,进行网格细分。然后,通过网格生成,重构浮雕边缘网格和浮雕表面网格。最后导出网格重构后的模型文件,完成浮雕网格重构。
本发明的技术方案:
一种适用于纹理贴图的浮雕网格重构方法,步骤如下:
(1)根据纹理图像边缘的网格细分
(1.1)纹理面片的构建
根据面片f1,f2......fnf构建对应的纹理面片集合UVF1={uvf1,uvf2......uvfnf},其中,fa与uvfa一一映射,1≤a≤nf,a∈N+;nf为初始网格面片最大索引值;uvfa顶点坐标为fa顶点UV坐标;
(1.2)纹理边缘采样点的位置分布
第一步,根据uvf1,uvf2......uvfnf分割纹理,得到纹理集合S1={s1,s2......snf},其中uvfa与sa一一映射;sa具体参数如下:
其中,为uvfa三个顶点坐标中U轴坐标最大值;为uvfa顶点坐标中V轴坐标最大值,为上述UV坐标中U轴最小值;为上述UV坐标中V轴最小值;为sa的宽度;为sa的高度;为sa左上角坐标相对于纹理图像T左上角坐标的偏移量;Twidth为T宽度,Theight为T高度;
第二步,分别对s1,s2......snf进行查找边缘;对于sa,查找边缘后得到轮廓集合SVa={sva1,sva2......svaα},且svab={svab1,svab2......svabβ};其中,sa与SVa一一映射;svab为SVa中第b个轮廓采样点序列,且1≤b≤α,α为轮廓数量;svabc为svab中第c个采样点,且1≤c≤β,β为svab中采样点数量;svabc在T上坐标为 计算过程如下:
第三步,判断采样点位置;分别判断与s1,s2......snf对应的轮廓集合SV1,SV2......SVnf中的采样点集中采样点相对于面片和网格边的位置,并建立边上采样点集合SOE={soe1,soe2......soene},soed={soev1,soev2......soevnse},其中ed与soed一一映射,1≤d≤ne;ne为初始网格边最大索引值;nse为soed中采样点数量;建立面片上采样点集合SOF={sof1,sof2......sofnf},sofa={sofv1,sofv2......sofvnsf},其中fa与sofa一一映射,nsf为sofa中采样点数量;
(1.3)采样边的构建
通过采样点得到采样边集合SE={se1,se2......senf},seg={seg1,seg2......segsne};其中,sea与sa一一映射,即sea为根据sa中采样点位置得到的采样边集合;segh为第h个插入seg的采样边,1≤h≤sne,sne为seg中采样边数量;
(1.4)多余采样点的删除
对于所有采样点,利用分治法,删除位置相同或两点之间欧式距离小于εv的采样点中的一个;
(1.5)根据采样点的网格细分
第一步,依次对面片f1,f2......fnf引入变量Ancestor,并将Ancestor赋值为面片索引,fa的Ancestora为a,Ancestora表示fa的Ancestor;
第二步,按照如下步骤进行网格细分:
1)依次遍历soe1,soe2......soecne1,对于每一个集合,找到soep中与ep中点的欧式距离最小的采样点soevdismin,其中,dismin取值唯一且1≤dismin≤nse;cne1为变量,随网格边索引最大值变化而变化,值始终与当前网格边索引最大值相等,初始值为ne;1≤p≤cne1,p∈N+;根据soevdismin的几何信息和ep顶点几何信息计算插值,在网格中生成新的顶点vnewk,其中,newk为生成新顶点后网格顶点最大索引值,然后对ep引入分割点变量SplitVertex,将vnewk赋值予SplitVertexp,SplitVertexp表示与ep对应的分割点变量;
2)构建面片集合WSF1:
①依次遍历f1,f2......fcnf1,对于每个面片,如果三条边中的任意一条边包含变量SplitVertex,将该面片插入WSF1;其中,cnf1随网格面片索引最大值变化而变化,值始终与当前网格面片索引最大值相等,初始值为nf;
②依次遍历WSF1中面片元素,直至所有元素被遍历;对于fi,如果上不包含则计算中点插值,在网格上生成新的顶点vnewi,其中,1≤i≤cnf1,i∈N+,fi∈WSF1;longest表示该边为fi最长边,为fi的最长边;为的分割点变量;newi为生成新顶点后网格顶点数量;然后,对引入变量将vnewi赋值予接着,删除ASi中与vnewi的UV坐标的欧式距离小于εv的采样点,并将以这些采样点为端点的采样边的对应端点坐标替换为vnewi的UV坐标,其中 分别为与fi三条边对应的SOE中的采样点集合;最后,如果另一个以为边的三角面片没有在WSF1中,则将其插入WSF1;
③依次遍历WSF1中面片元素,根据各面片边上SplitVertex建立拓扑关系,细分网格,具体步骤如下:
a.如果面片中有且只有1条边上有SplitVertex,以SplitVertex和不含SplitVertex的两条边的公共顶点为端点,构建新边,将三角面片分割为2个新面片;如果面片中有且只有2条边上有SplitVertex,连接两个SplitVertex,构成第一条新边;因为连接SplitVertex和另外两条边公共顶点有两种情况,所以比较这两种情况下新建边的长度,选取更短的情况构成第二条新边;新建的两条新边将面片分为3个新面片;如果面片中有3条边上有SplitVertex,依次连接三个SplitVertex,构成三条新边,将三角面片分割为4个新面片;
b.将a的取值范围改为1≤a≤cnf1,a∈N+;将d的取值范围改为1≤d≤cne1,d∈N+;
c.对于每一个面片,将被分割前与该面片对应的SOF中的采样点集合和与该面片三条边分别对应的SOE中的采样点集合中的采样点分配到与新面片对应的采样点集合和与新网格边对应的采样点集合,并分别插入SOF,SOE;
d.对于每一个面片,将面片Ancestor变量值赋予通过分割该面片得到的新面片的Ancestor变量;
4)重复步骤1)—3),直至soe1,soe2......soecne1都变为空集;然后遍历sof1,sof2......sofcnf1,直至找到一个采样点集合不为空集,具体步骤如下:
①找到该集合中与该集合对应的纹理面片重心的欧式距离最小的采样点元素,将采样点从集合中删除,并根据该采样点与该纹理面片对应的网格面片顶点几何信息计算插值,在网格上生成新的顶点vnewa;其中,newa为新顶点生成后网格顶点最大索引值;
②将vnewa与面片顶点分别连接,构成三条新边,将面片分割为三个新面片;
③将a的取值范围改为1≤a≤cnf1,a∈N+;将d的取值范围改为1≤d≤cne1,d∈N+;
④对于每一个被分割面片,将被分割前与该面片对应的SOF中的采样点集合中的采样点元素,分配到与新面片对应的采样点集合和与新网格边对应的采样点集合,并分别将这些集合插入SOE和SOF;
⑤对于每一个被分割面片,将面片Ancestor变量值赋予通过分割该面片得到的新面片的Ancestor变量;
5)重复步骤1)—4),直至soe1,soe2......soecne1,sof1,sof2......sofcnf1都变为空集;
(1.6)根据采样边的网格细分
第一步,根据Ancestor变量建立AF={af1,af2......afnf},afj={fk|(Ancestork=j)∧(1≤k≤cnf2∧k∈N+)},其中,1≤j≤nf,j∈N+;cnf2随网格面片索引最大值变化而变化,值始终与当前网格面片索引最大值相等;
第二步,计算采样边与网格边的相交情况,细分网格;依次遍历AF中每个集合,对于每一个AF集合,具体步骤如下:
1)构建边集ae,依次遍历集合中的面片元素,对于面片的各条边,如果以该边为边的两个面片的Ancestor值都与集合对应的Ancestor值相同,则将该边插入集合ae,其中ae中元素不重复;
2)依次遍历SE中与该面片集合对应的采样边集合中的采样边元素,细分网格;对于每一条采样边元素,具体步骤如下:
①根据采样边端点坐标和网格边顶点UV坐标将采样边和ae中网格边元素转至普吕克坐标系;
②建立网格边集合inserte;依次遍历ae中各网格边,在普吕克坐标系下,计算网格边与采样边是否相交,如果相交,将该网格边插入集合inserte;
③依次遍历inserte中网格边元素,根据交点生成网格顶点,建立WSF2集合,对于每条网格边,根据该网格边顶点和该采样边端点几何信息,计算网格边与采样边交点的几何信息,并在网格上生成新的顶点vnewb;其中,newb为新顶点生成后网格顶点最大索引值;将vnewb赋值予网格边的SplitVertex变量;将以该网格边为边的面片插入WSF2;
④依次遍历WSF2中面片元素,进行网格细分;细分方式与(1.5)的2)中③相同;
⑤将通过本次细分得到的新的网格边插入ae;
(2)3D浮雕网格重构
(2.1)网格面片颜色属性的标记
1)分别将纹理面片顶点坐标转至与该纹理面片对应的S中的图像像素坐标系下;
2)在图像坐标系下,遍历位于纹理面片内部的像素点,如果像素值为0的像素点数量占所有位于纹理面片内部的像素点数量的εcolor,则将该面片标记为Blackface;同理,如果像素值为255的像素点数量占εcolor,则将该面片标记为Whiteface;εcolor取90%,因误差等因素,可逐渐降低εcolor,直至判断面片颜色属性;
(2.2)网格顶点和网格边属性的标记
第一步,标记网格边和顶点的边缘属性;遍历其中,cne3为变量,随网格边索引最大值变化而变化,值始终与当前网格边索引最大值相等;对于每条网格边,如果以该网格边为边的两个三角面片的颜色属性不一致,则将该网格边标记为Boundaryedge,同时将该网格边的两个端点标记为Boundaryvertex;
第二步,标记网格顶点的颜色属性;遍历其中,cnv3为变量,随网格顶点索引最大值变化而变化,值始终与当前网格顶点索引最大值相等;对于每个网格顶点,如果该顶点没有被标记为Boundaryvertex,说明该顶点的一阶领域三角面片颜色属性相同,且该顶点与一阶领域三角面片颜色属性相同,比如该顶点的一阶领域三角面片颜色属性为Blackface,则将该顶点标记为Blackvertex;
(2.3)网格面片边缘属性的标记
1)依次遍历该面片三个顶点,如果三个顶点都没有被标记为Boundaryvertex,则将该面片标记为NotBoundaryface;如果至少有一个顶点被标记为Boundaryvertex,继续执行(2.3)的2);
2)依次遍历该面片三条边,有以下3种标记情况:
①没有边被标记为Boundaryedge,且该面片颜色属性为Blackface,则将该面片标记为BoundaryInface;
②没有边被标记为Boundaryedge,且该面片颜色属性为Whiteface,则将该面片标记为BoundaryOutface;
③至少有一边被标记为Boundaryedge,则将该面片标记为Boundaryface;
(2.4)网格点环的生成
根据浮雕边缘网格顶点拓扑信息,生成网格点环,具体步骤如下:
1)建立网格边不重复集合ringedge,网格顶点集合ringvertex,依次遍历对于每个网格顶点,如果以该顶点为端点的网格边中,有大于两条网格边被标记为Boundaryedge,将该顶点插入ringvertex;
2)生成网格顶点;依次遍历ringvertex中网格顶点元素,对于每一个网格顶点,遍历以该顶点为端点的所有网格边,对于每一条网格边,在距离(欧式距离)该顶点dist的网格边上计算插值,生成网格顶点vnewd;其中,newd为生成新顶点后网格顶点最大索引值;dist取该网格边长度的εring,εring取2.0*10-5;将vnewd赋值予该网格边的SplitVertex变量;
3)生成网格拓扑信息;依次遍历ringvertex中网格顶点元素,对于每一个顶点,具体步骤如下:
①遍历该顶点的一阶领域三角面片,对于每一个面片,根据网格顶点,建立拓扑信息:
以该顶点为起始顶点,逆时针遍历该面片顶点,分别赋予临时别名v1,v2,v3;以v1和v2为端点的网格边SplitVertex变量值称为SplitVertex1,以v1和v3为端点的网格边SplitVertex变量值称为SplitVertex2;
连接SplitVertex1和SplitVertex1,构成第一条新网格边;连接SplitVertex1和v2,构成第二条新网格边;该面片被分割为三个新面片;
②标记新面片的颜色属性;将该顶点的一阶领域三角面片标记为Whiteface;该顶点的二阶领域三角面片标记为母面片颜色属性;
(2.5)(2.1)-(2.4)的迭代
清除网格顶点,边,面片的边缘属性,迭代进行(2.1)-(2.4),直至所有网格顶点都满足:以该顶点为端点的所有网格边中,有不超过2条被标记为Boundaryedge;
(2.6)浮雕边缘网格和表面网格的重构
第一步,根据被标记为Boundaryvertex生成新的网格顶点;具体步骤如下:
1)建立集合BoundarySetvertex;将中,被标记为Boundaryvertex的顶点插入BoundarySetvertex;其中cnv4随网格顶点索引最大值变化而变化,值始终与当前网格顶点索引最大值相等;
2)生成新的网格顶点;依次遍历BoundarySetvertex中顶点元素,对于每个网格顶点,根据该顶点几何信息,生成新的网格顶点vnewe,其中,newe为生成新顶点后网格顶点最大索引值,vnewe的几何信息计算过程如下:
其中,其中分别为vnewe的模型坐标和UV坐标;分别为该顶点的模型坐标和UV坐标;为该顶点的归一化法线坐标;εrelief在网格归一化的情况下取0.1;为该顶点引入变量Above,并将vnewe赋值予Above;
3)根据网格顶点,建立拓扑信息;具体步骤如下:
①建立浮雕边缘拓扑信息;首先建立BoundarySetedge;依次遍历E={e1,e2......ecne4},其中cne4随网格边索引最大值变化而变化,值始终与当前网格边索引最大值相等;对于每一条网格边,如果该网格边被标记为Boundaryedge,将该网格边插入集合BoundarySetedge;
依次遍历BoundarySetedge中网格边元素,对于每一条网格边,暂称以该网格边为边并且颜色属性为Blackface的三角面片为fB,以fB中非该网格边端点的顶点为起点,逆时针遍历,先遍历到的顶点(不包含起点)称为ev1,后遍历到的称为ev2;
新建面片fnew1,fnew2,fnew1的顶点为Above1,ev1,Above2;fnew2的顶点为Above2,ev1,ev2;其中,Above1,Above2分别为ev1,ev2的Above值;new1,new2分别为生成新面片后网格面片最大索引值;
②创建浮雕表面拓扑信息;首先,创建集合reliefface;依次遍历其中,cnf4为当前网格面片最大索引值;将被标记为BoundaryInface和Boundaryface的面片插入reliefface;接着,依次遍历reliefface中的面片元素,对于每个面片,依次遍历该面片的顶点,如果顶点有变量Above且Above不为空值,则用Above值替代该顶点成为新的顶点,所有顶点更改后构成新面片,删除原面片;
(2.7)网格顶点位置的调整
依次遍历所有没有被标记为Boundaryvertex且颜色属性为Blackvertex的网格顶点,对于每个顶点,该顶点新的模型坐标vnewpos计算过程如下:
vnewpos=vpos+εrelief*vnormal (2.3)
其中,vpos为该顶点未调整前的模型坐标;vnormal为该顶点的归一化法线坐标;εrelief在网格归一化的情况下取0.1就得到凸出明显的浮雕。
本发明的有益效果:本发明提出一种适用于纹理贴图的浮雕网格重构方法,通过适用于纹理图像信息的网格细分,网格生成,重构了浮雕边缘网格和浮雕表面网格。通过本发明重构浮雕网格,过程简洁,细节突出,效果精细。与普通网格重构方法相比,该方法减少了不必要顶点的生成,效率更高,而且能展现浮雕更多的细节,效果更好。
附图说明
图1是本发明的流程图。
图2(a)是用于构建图2(b)纹理面片的网格面片示意图。
图2(b)是由图2(a)网格面片构建的纹理面片示意图。
图3是网格边细分示意图。
图4(a)是网格边细分(新建边长于图4(b))示意图。
图4(b)是网格边细分(新建边短于图4(a))示意图。
图5是网格边细分示意图。
图6是网格面片细分示意图。
图7是点环生成网格边细分示意图。
图8(a)是点环生成(网格重构前)示意图。
图8(b)是点环生成(网格重构后)示意图。
图9是浮雕边缘的网格重构示意图。
图10是浮雕表面的网格重构示意图。
图11(a)是输入纹理示意图。
图11(b)是三维雕刻结果示意图。
图11(c)是三维雕刻结果(侧面角度)示意图。
图11(d)是三维雕刻结果(不同渲染)示意图。
图11(e)是带有纹理贴图的三维浮雕结果示意图。
具体实施方式
以下结合附图和技术方案,进一步说明本发明的具体实施方式。
一种适用于纹理贴图的浮雕网格重构方法,具体可分为导入模型文件和图像文件;根据导入的纹理图像边缘采样点,对由导入的模型文件数据构建的三角网格,进行网格细分;通过网格生成,重构浮雕边缘网格和浮雕表面网格;导出网格重构后的模型文件这四个主要步骤:
(一)模型文件和图像文件的导入
以M模型和P图像为例。
可以使用Assimp等库读取M模型文件(obj,stl等),并使用半边数据结构存储M模型网格数据。根据模型文件数据构建三角网格,三角网格M由(V,E,F)表示,其中V={v1,v2......vnv}为网格顶点集合,E={e1,e2......ene}为网格边集合,F={f1,f2......fnf}为网格面片集合。其中,nv表示初始网格顶点索引最大值;ne表示初始网格边索引最大值;nf表示初始网格面片索引最大值。
可以使用OpenCV等库读取P图像文件(bmp,png等),并将图像灰度化后二值化,像素灰度值为0或255。二值化后的P图像称为图像T。T的宽度为Twidth,高度为Theight。
(二)根据图像T边缘的格细分
根据面片f1,f2......fnf构建对应的纹理面片集合UVF={uvf1,uvf2......uvfnf},其中fi与uvfi一一映射,1≤i≤nf,i∈N+。
接着,根据uvf1,uvf2......uvfnf分割纹理,得到纹理集合S1={s1,s2......snf},其中uvfi与si一一映射。si具体参数如下:
其中,为面片uvfi顶点的坐标中U轴坐标最大值;为面片uvfi顶点的UV坐标 中V轴坐标最大值。同理,为上述UV坐标中U轴最小值;为上述UV坐标中V轴最小值。为si的宽度;为si的高度;为si左上角坐标相对于T左上角坐标的偏移量。
接着,可以使用OpenCV等库分别对s1,s2......snf进行查找边缘,以si为例,查找边缘后得到轮廓集合SVi={svi1,svi2......sviα},且svij={svij1,svij2......svijβ}。其中,si与SVi一一映射,svij为SVi中第j个轮廓采样点序列,且1≤j≤α,α为轮廓数量;svijk为svij中第k个采样点,且1≤k≤β,β为svij中采样点数量。svijk在T上坐标为 计算过程如下:
接着,判断采样点位置。分别判断s1,s2......snf的轮廓集SV1,SV2......SVnf中的采样点集中采样点的位置,并建立边上采样点集合SOE={soe1,soe2......soene},soed={soev1,soev2......soevnse},其中ed与soed一一映射,1≤d≤ne;soevtemp1为SVi中svij轮廓中的svijk的别名,1≤temp1≤nse;建立面上采样点集合SOF={sof1,sof2......sofnf},sofi={sofv1,sofv2......sofvnsf},其中fi与sofi一一映射,nsf为sofi中采样点数量,sofvtemp2为SVi中svij轮廓中的svijk的别名,1≤temp2≤nsf。
以采样点svijk为例,如果svijk与uvfi顶点中的某一顶点的欧式距离小于εv,则将svijk标记为OnEdge;或者svijk与uvfi边中的某一条边的欧式距离小于εe,则将svijk标记为OnEdge,并将svijk插入与该边插入SOE中的与之对应的集合;如果svijk与uvfi的三条边的欧式距离都大于εe并且与三个顶点的欧式距离都大于εv,并且svijk在uvfi内部,则将svijk标记为InsideFace,并将svijk插入sofi;如果svijk与uvfi的三条边的欧式距离都大于εe并且与三个顶点的欧式距离都大于εv,并且svijk在uvfi外部,则将svijk标记为OutsideFace。其中,εv取1.0*10-3,εe取5.0*10-4。判断位于内部还是外部的方法如下:
因为需要计算外积,所以先将svijk坐标和顶点坐标拓展到三维,且第三维赋值0.0。svijk坐标变为uvvi1坐标变为uvvi2坐标变为uvvi3坐标变为然后通过(3.4),(3.5),(3.6)计算,
接着,通过采样点得到采样边集合SE={se1,se2......senf},sei={sei1,sei2......seisne}。其中,sei与si一一映射,即sei为根据si中采样点位置得到的采样边集合,siq为第q个插入sei的采样边,1≤q≤sne,sne为sei中采样边数量。得到采样边的具体方式如下:
依次以svij1和svij2,svij2和svij3……svijk和svijk+1……svijnse-1和svijnse,以及svijnse和svij1为采样边端点,判断是否需要插入sei中。以svijk和svijk+1为例,并设当前需要的判断的采样边为seexample1,1≤example1≤sne,如果svijk和svijk+1的标记情况符合以下任意一种情况,
①svijk:InsideFace svijk+1:InsideFace
②svijk:InsideFace svijk+1:OnEdge
③svijk:OnEdgesvijk+1:InsideFace
则将seexample1插入sei;如果svijk和svijk+1的标记情况符合下面两种情况的一种,
①svijk:InsideFacesvijk+1:OutsideFace
②svijk:OutsideFace svijk+1:InsideFace
则按照下面步骤:
2)如果某一顶点与seexample1的欧式距离小于dist1≤εe,进行步骤a,否则,进行步骤b。
a.将seexample1中被标记为OutsideFace的端点坐标替换为该顶点坐标,然后将seexample1插入sei。
b.判断uvfi的三条边uvei1,uvei2,uvei3与seexample1的相交情况,如果某边与seexample1相交,计算交点,并将seexample1中被标记为OutsideFace的端点坐标替换为交点坐标,然后将交点作为采样点标记为OnEdge,并将其插入svi1和与该边在SOE中对应的集合,然后将seexample1插入sei。
有些采样点位置相同或者两点之间欧式距离小于εv,所以接着需要删除多余的采样点。依次以面片f1,f2......fnf为单位,进行如下步骤:
2)基于分治法,找到ASi中的最近点对,如果两点之间欧式距离小于εv,进行如下步骤:
删除其中一个采样点,并将以该采样点为端点的采样边的对应端点坐标替换为另一个采样点的坐标。
3)重复2)直至最近点对两点之间欧式距离大于εv。
接着,依次对面片f1,f2......fnf引入变量Ancestor,并将Ancestor赋值为面片索引。比如f1的Ancestor为1,f2的Ancestor为2,以此类推。Ancestori表示fi的Ancestor。
接着,按照如下步骤进行网格细分:
1)依次遍历soe1,soe2......soecne1,以soer为例,找到soer中与er中点的欧式距离最小的采样点soevdismin。其中,dismin取值唯一且1≤dismin≤nse;cne1为变量,随网格边最大索引值变化而变化,值始终与当前网格边索引最大值相等,初始值为ne;1≤r≤cne1,r∈N+。根据soevdismin的几何信息在网格中生成新的顶点vnewa,其中,newa为生成新顶点后网格顶点最大索引值,vnewa的几何信息包括和其中为vnewa的模型坐标,为vnewa的UV坐标,和计算过程如下:
②如果udiff<=εthreshold,按照方式a计算;如果vdiff<=εthreshold,按照方式b计算;如果udiff>εthreshold且vdiff>εthreshold,按照方式c计算
2)将任意一条边上包含SplitVertex变量(SplitVertex不为空值)的面片插入集合(元素不重复)WSF1,具体步骤如下:
①依次遍历f1,f2......fcnf1,如果面片的三条边中的任意一条边包含变量SplitVertex(SplitVertex不为空值),将该面片插入WSF1,其中cnf1随网格面片最大索引值变化而变化,值始终与当前网格面片索引最大值相等。
②依次遍历WSF1中面片,直至所有面片被遍历。以fexm为例,如果fexm的最长边上不包含变量则参照中点几何信息,在网格上生成新的顶点vnewb,其中,1≤exm≤cnf1,exm∈N+,fexm∈WSF1;longest表示该边为fexm最长边,为fexm的最长边;为的分割点变量;newb为成新顶点后网格顶点最大索引值,vnewb的几何信息包括和其中为vnewb的模型坐标,为vnewb的UV坐标,和计算过程如下:
④以面片fexm为单位,删除与vnewb的UV坐标欧式距离小于εv的采样点,具体步骤如下:
b.依次遍历ASexm中元素,删除与vnewb的UV坐标的欧式距离小于εv的采样点,并将以这些采样点为端点的采样边的对应端点坐标替换为vnewb的UV坐标
3)依次遍历WSF中元素,根据各面片边上变量SplitVertex建立拓扑关系,细分网格,以fexm为例,具体步骤如下:
①如果fexm中有且只有1条边上有变量SplitVertex(SplitVertex不为空值),以边上SplitVertex和不含SplitVertex的两条边的公共顶点为端点,构建新边,将三角面片分割为2个新面片,如图3;如果fexm中有且只有2条边上有变量SplitVertex(SplitVertex不为空值),连接两个SplitVertex,构成第一条新边;因为连接SplitVertex和另外两条边公共顶点有两种情况(如图4(a),图4(b)),所以比较这两种情况下新建边的长度,选取更短的情况构成第二条新边。新建的两条新边将面片分为3个新面片,如图4(b)。如果fexm中有3条边上有变量SplitVertex(SplitVertex不为空值),依次连接三个SplitVertex,构成三条新边,将三角面片分割为4个新面片,如图5。
③将Ancestorexm变量值赋予通过分割fexm得到的新面片的Ancestor变量。
4)重复1)—3),直至soe1,soe2......soecne1都变为空集。然后遍历sof1,sof2......sofcnf1,以sofexm2为例,其中,1≤exm2≤cnf1,exm2∈N+。具体步骤如下:
①依次遍历sofexm2中采样点元素,找到与uvfexm2重心的欧式距离最小的采样点sofvdismin,根据sofvdismin几何信息,在网格上生成新的顶点vnewc。其中,newc为生成新顶点后网格顶点最大索引值,vnewc的几何信息包括和其中为的模vnewc型坐标,为vnewc的UV坐标,和计算过程如下:
scalem1,scalen1的计算过程如下:
③将与fexm2一一对应的sofexm2中采样点分配到与新网格面片一一对应的采样点集合和新网格边一一对应的采样点集合中,并将这些集合分别插入SOF和SOE。
④将Ancestorexm2变量值赋予新面片的Ancestor。
5)重复1)—4),直至soe1,soe2......soecne1,sof1,sof2......sofcnf1都变为空集。
接着,根据Ancestor变量建立AF={af1,af2......afnf},afexm3={ftemp3|(Ancestortemp3=exm3)∧(1≤temp3≤cnf2∧cnf2∈N+)},其中,1≤exm3≤nf,exm3∈N+;cnf2随网格面片最大索引值变化而变化,值始终与当前网格面片索引最大值相等。
接着,计算采样边与网格边的相交情况,细分网格。依次遍历AF={af1,af2......afnf},以afexm3为例,具体步骤如下:
1)依次遍历afexm3中的面片元素,对于面片的各条边,如果以该边为边的两个面片的Ancestor值都与集合对应的Ancestor值相同,则将该边插入集合aeexm3,其中aeexm3中元素不重复。
2)依次遍历seexm3中采样边元素,判断与aeexm3中网格边的相交情况,细分网格。以seexmt为例,其中,seexmt表示seexmt∈seexm3。具体步骤如下:
①根据seexmt端点坐标和aeexm3中网格边顶点UV坐标将seexmt和aeexm3中网格边元素转至普吕克坐标系(Plücker coordinates)。
②建立集合inserteexm3。依次遍历aeexm3中各元素,比如aeexmt,其中,aeexmt表示aeexmt∈aeexm3。在普吕克坐标系下,计算aeexmt与seexmt是否相交,如果相交,将aeexmt插入集合inserteexm3。
③依次遍历inserteexm3中网格边元素,根据交点生成网格顶点,建立WSF2集合(无重复元素),以aeexmt为例,具体过程如下:
根据aeexmt和seexmt顶点几何信息,在网格上生成新的顶点vnewd。其中,newd为当前网格顶点数量,vnewd的几何信息包括和其中为vnewd的模型坐标,为vnewd的UV坐标,和计算过程如下:
将vnewd赋值予aeexmt的SplitVertex变量。将以aeexmt为边的面片插入WSF。
④依次遍历WSF中面片元素,进行网格细分。细分方式与(1.5)的2)中③相同。
⑤将通过本次细分得到的新的网格边插入aeexm3。
(三)3D浮雕网格重建
2)在图像坐标系下,遍历位于sexm5内部的像素点,如果像素值为0的像素点数量占所有位于sexm5内部的像素点数量的εcolor,则将该面片标记为Blackface;同理,如果像素值为255的像素点数量占εcolor,则将该面片标记为Whiteface。εcolor通常取90%,因误差等因素,可逐渐降低εcolor,直至可以判断面片颜色属性。
接着,标记网格边和顶点的边缘属性。遍历其中,cne3为变量,随网格边最大索引值变化而变化,值始终与当前网格边最大索引值相同。以eexm6为例,其中,1≤exm6≤cne3,exm6∈N+。如果以eexm6为边的两个三角面片的颜色属性不一致,则将eexm6标记为Boundaryedge,同时将eexm6的两个端点标记为Boundaryvertex。
接着,标记网格顶点的颜色属性。遍历其中,cnv3为变量,随网格顶点最大索引值变化而变化,值始终与当前网格顶点最大索引值相同。以vexm7为例,其中,1≤exm7≤cnv3,exm7∈N+。如果vexm7没有被标记为Boundaryvertex,说明vexm7的一阶领域三角面片颜色属性相同,且vexm7与一阶领域三角面片颜色属性相同,比如vexm7的一阶领域三角面片颜色属性为Blackface,则将vexm7标记为Blackvertex。
接着,标记网格面片边缘属性,依次遍历面片f1,f2......fcnf3,以fexm5为例,具体步骤如下:
1)依次遍历fexm5三个顶点如果三个顶点都没有被标记为Boundaryvertex,则将fexm5标记为NotBoundaryface;如果至少有一个顶点被标记为Boundaryvertex,继续执行2)。
①没有边被标记为Boundaryedge,且fexm5颜色属性为Blackface,则将fexm5标记为BoundaryInface。
②没有边被标记为Boundaryedge,且fexm5颜色属性为Whiteface,则将fexm5标记为BoundaryOutface。
③至少有一边被标记为Boundaryedge,则将fexm5标记为Boundaryface。
接着,为了避免在下一步中生成非流形网格,需要根据浮雕边缘网格顶点拓扑信息,生成网格点环,具体步骤如下:
1)建立网格边不重复集合ringedge,网格顶点集合ringvertex,依次遍历V={v1,v2......vcnv3},以vexm7为例,如果以vexm7为端点的网格边中,有两条以上(不包含两条)的网格边被标记为Boundaryedge,将vexm7插入ringvertex。
2)生成网格顶点。依次遍历ringvertex中网格顶点元素,以ringvertex中vring为例,其中,vring∈ringvertex。遍历以vring为端点的所有网格边,以ering为例,其中,ering表示以vring为端点的网格边。根据ering几何信息,生成网格顶点vnewe,其中,newe为生成新顶点后网格顶点最大索引值,vnewe的几何信息包括和其中为vnewe的模型坐标,为vnewe的UV坐标,和计算过程如下:
3)生成网格拓扑信息。依次遍历ringvertex中网格顶点元素,以vring为例,具体步骤如下:
①遍历vring的一阶领域三角面片,以fring为例,其中,fring表示vring的一阶领域三角面片。根据网格顶点,建立拓扑信息。为了方便表示,以vring为起始顶点,逆时针遍历fring顶点,分别赋予临时别名v1,v2,v3。删除fring,构建新三角面片:以v1,SplitVertex1,SplitVertex2为顶点的fnew1;以v2,SplitVertex1,SplitVertex2为顶点的fnew2;以v2,v3,SplitVertex1为顶点的fnew3。其中,SplitVertex1是以v1,v3为端点的网格边对应的SplitVertex,SplitVertex2是以v1,v2为端点的网格边对应的SplitVertex;new1,new2,new3分别为生成新面片后网格面片最大索引值。如图7。
②标记新面片的颜色属性。将vring的一阶领域三角面片标记为Whiteface;将vi的二阶领域三角面片标记为原面片颜色属性,如图8。
接着,清除网格顶点,边,面片的边缘属性,迭代进行(三)中这步之前的步骤,直至所有网格顶点都满足:以该顶点为端点的所有网格边中,有不超过2条被标记为Boundaryedge。
接着,根据被标记为Boundaryvertex生成新的网格顶点。具体步骤如下:
1)建立集合BoundarySetvertex。依次遍历网格顶点V={v1,v2......vcnv4},cnv4随网格顶点最大索引值变化而变化,值始终与当前网格顶点最大索引值相同。以vexm8为例,其中,1≤exm8≤cnv4,exm8∈N+。如果vexm8被标记为Boundaryvertex,则将vexm8插入BoundarySetvertex。
2)生成新的网格顶点。依次遍历BoundarySetvertex中顶点元素,以vexm8为例,根据vexm8几何信息,生成新的网格顶点vnewf,其中,newf为生成新顶点后网格顶点最大索引值,vnewf的几何信息包括和其中为vnewf的模型坐标,为vnewf的UV坐标,和计算过程如下:
3)根据网格顶点,建立拓扑信息。具体步骤如下:
①建立浮雕边缘拓扑信息。首先建立BoundarySetedge。依次遍历E={e1,e2......ecne4},其中,cne4随网格边最大索引值变化而变化,值始终与当前网格边最大索引值相同。以eexm9为例,其中,1≤exm9≤cne4,exm9∈N+。如果eexm9被标记为Boundaryedge,将eexm9插入集合BoundarySetedge。然后依次遍历BoundarySetedge中网格边元素,以eexm9为例,eexm9有两个端点,为了方便表示,按照如下方式赋予端点别名:
eexm9被标记为Boundaryedge,说明以eexm9为边的三角面片颜色属性一个为Blackface,一个为Whiteface,暂称颜色属性为Blackface的三角面片为以中非eexm9端点的顶点为起点,逆时针遍历,先遍历到的顶点称为后遍历到的称为
②创建浮雕表面拓扑信息。首先,创建集合reliefface。依次遍历F={f1,f2......fcnf4},其中,cnf4随网格面片最大索引值变化而变化,值始终与当前网格面片最大索引值相同。将被标记为Boundaryface和BoundaryInface的面片插入reliefface。接着,依次遍历reliefface,以fexmf为例,其中,1≤exmf≤cnf4,exmf∈N+。依次遍历fexmf的顶点以为例,其中,1≤temp3≤3,temp3∈N+。如果不为空值,则用替代成为新的顶点,其中,表示对应的Above值。所有顶点更改后构成新面片,删除原面片fexmf。如图10。
接着,建立集合BlackSetvertex。依次遍历V={v1,v2......vcnv5},其中,cnv5随网格顶点最大索引值变化而变化,值始终与当前网格顶点最大索引值相同。以vexmv为例,其中,1≤exmv≤cnf5,exmv∈N+。如果vexmv没有被标记为Boundaryvertex,且vexmv的颜色属性为Blackvertex,则将vexmv插入集合BlackSetvertex。
(四)网格重构后模型文件的导出
根据(一)~(三)得到的半边数据结构和网格数据,可以通过Assimp等库导出网格重构后的模型文件。
Claims (1)
1.一种适用于纹理贴图的浮雕网格重构方法,其特征在于,步骤如下:
(1)根据纹理图像边缘的网格细分
(1.1)纹理面片的构建
根据面片f1,f2......fnf构建对应的纹理面片集合UVF1={uvf1,uvf2......uvfnf},其中,fa与uvfa一一映射,1≤a≤nf,a∈N+;nf为初始网格面片最大索引值;uvfa顶点坐标为fa顶点UV坐标;
(1.2)纹理边缘采样点的位置分布
第一步,根据uvf1,uvf2......uvfnf分割纹理,得到纹理集合S1={s1,s2......snf},其中uvfa与sa一一映射;sa具体参数如下:
其中,为uvfa三个顶点坐标中U轴坐标最大值;为uvfa顶点坐标中V轴坐标最大值,为上述UV坐标中U轴最小值;为上述UV坐标中V轴最小值;为sa的宽度;为sa的高度;为sa左上角坐标相对于纹理图像T左上角坐标的偏移量;Twidth为T宽度,Theight为T高度;
第二步,分别对s1,s2......snf进行查找边缘;对于sa,查找边缘后得到轮廓集合SVa={sva1,sva2......svaα},且svab={svab1,svab2......svabβ};其中,sa与SVa一一映射;svab为SVa中第b个轮廓采样点序列,且1≤b≤α,α为轮廓数量;svabc为svab中第c个采样点,且1≤c≤β,β为svab中采样点数量;svabc在T上坐标为 计算过程如下:
第三步,判断采样点位置;分别判断与s1,s2......snf对应的轮廓集合SV1,SV2......SVnf中的采样点集中采样点相对于面片和网格边的位置,并建立边上采样点集合SOE={soe1,soe2......soene},soed={soev1,soev2......soevnse},其中ed与soed一一映射,1≤d≤ne;ne为初始网格边最大索引值;nse为soed中采样点数量;建立面片上采样点集合SOF={sof1,sof2......sofnf},sofa={sofv1,sofv2......sofvnsf},其中fa与sofa一一映射,nsf为sofa中采样点数量;
(1.3)采样边的构建
通过采样点得到采样边集合SE={se1,se2......senf},seg={seg1,seg2......segsne};其中,sea与sa一一映射,即sea为根据sa中采样点位置得到的采样边集合;segh为第h个插入seg的采样边,1≤h≤sne,sne为seg中采样边数量;
(1.4)多余采样点的删除
对于所有采样点,利用分治法,删除位置相同或两点之间欧式距离小于εv的采样点中的一个;
(1.5)根据采样点的网格细分
第一步,依次对面片f1,f2......fnf引入变量Ancestor,并将Ancestor赋值为面片索引,fa的Ancestora为a,Ancestora表示fa的Ancestor;
第二步,按照如下步骤进行网格细分:
1)依次遍历soe1,soe2......soecne1,对于每一个集合,找到soep中与ep中点的欧式距离最小的采样点soevdismin,其中,dismin取值唯一且1≤dismin≤nse;cne1为变量,随网格边索引最大值变化而变化,值始终与当前网格边索引最大值相等,初始值为ne;1≤p≤cne1,p∈N+;根据soevdismin的几何信息和ep顶点几何信息计算插值,在网格中生成新的顶点vnewk,其中,newk为生成新顶点后网格顶点最大索引值,然后对ep引入分割点变量SplitVertex,将vnewk赋值予SplitVertexp,SplitVertexp表示与ep对应的分割点变量;
2)构建面片集合WSF1:
①依次遍历f1,f2......fcnf1,对于每个面片,如果三条边中的任意一条边包含变量SplitVertex,将该面片插入WSF1;其中,cnf1随网格面片索引最大值变化而变化,值始终与当前网格面片索引最大值相等,初始值为nf;
②依次遍历WSF1中面片元素,直至所有元素被遍历;对于fi,如果上不包含则计算中点插值,在网格上生成新的顶点vnewi,其中,1≤i≤cnf1,i∈N+,fi∈WSF1;longest表示该边为fi最长边,为fi的最长边;为的分割点变量;newi为生成新顶点后网格顶点数量;然后,对引入变量将vnewi赋值予接着,删除ASi中与vnewi的UV坐标的欧式距离小于εv的采样点,并将以这些采样点为端点的采样边的对应端点坐标替换为vnewi的UV坐标,其中 分别为与fi三条边对应的SOE中的采样点集合;最后,如果另一个以为边的三角面片没有在WSF1中,则将其插入WSF1;
③依次遍历WSF1中面片元素,根据各面片边上SplitVertex建立拓扑关系,细分网格,具体步骤如下:
a.如果面片中有且只有1条边上有SplitVertex,以SplitVertex和不含SplitVertex的两条边的公共顶点为端点,构建新边,将三角面片分割为2个新面片;如果面片中有且只有2条边上有SplitVertex,连接两个SplitVertex,构成第一条新边;因为连接SplitVertex和另外两条边公共顶点有两种情况,所以比较这两种情况下新建边的长度,选取更短的情况构成第二条新边;新建的两条新边将面片分为3个新面片;如果面片中有3条边上有SplitVertex,依次连接三个SplitVertex,构成三条新边,将三角面片分割为4个新面片;
b.将a的取值范围改为1≤a≤cnf1,a∈N+;将d的取值范围改为1≤d≤cne1,d∈N+;
c.对于每一个面片,将被分割前与该面片对应的SOF中的采样点集合和与该面片三条边分别对应的SOE中的采样点集合中的采样点分配到与新面片对应的采样点集合和与新网格边对应的采样点集合,并分别插入SOF,SOE;
d.对于每一个面片,将面片Ancestor变量值赋予通过分割该面片得到的新面片的Ancestor变量;
4)重复步骤1)—3),直至soe1,soe2......soecne1都变为空集;然后遍历sof1,sof2......sofcnf1,直至找到一个采样点集合不为空集,具体步骤如下:
①找到该集合中与该集合对应的纹理面片重心的欧式距离最小的采样点元素,将采样点从集合中删除,并根据该采样点与该纹理面片对应的网格面片顶点几何信息计算插值,在网格上生成新的顶点vnewa;其中,newa为新顶点生成后网格顶点最大索引值;
②将vnewa与面片顶点分别连接,构成三条新边,将面片分割为三个新面片;
③将a的取值范围改为1≤a≤cnf1,a∈N+;将d的取值范围改为1≤d≤cn1e,d∈N+;
④对于每一个被分割面片,将被分割前与该面片对应的SOF中的采样点集合中的采样点元素,分配到与新面片对应的采样点集合和与新网格边对应的采样点集合,并分别将这些集合插入SOE和SOF;
⑤对于每一个被分割面片,将面片Ancestor变量值赋予通过分割该面片得到的新面片的Ancestor变量;
5)重复步骤1)—4),直至soe1,soe2......soecne1,sof1,sof2......sofcnf1都变为空集;
(1.6)根据采样边的网格细分
第一步,根据Anc变量建立AF={af1,af2......afnf},afj={fk|(Ancestork=j)∧(1≤k≤cnf2∧k∈N+)},其中,1≤j≤nf,j∈N+;cnf2随网格面片索引最大值变化而变化,值始终与当前网格面片索引最大值相等;
第二步,计算采样边与网格边的相交情况,细分网格;依次遍历AF中每个集合,对于每一个AF集合,具体步骤如下:
1)构建边集ae,依次遍历集合中的面片元素,对于面片的各条边,如果以该边为边的两个面片的Ancestor值都与集合对应的Ancestor值相同,则将该边插入集合ae,其中ae中元素不重复;
2)依次遍历SE中与该面片集合对应的采样边集合中的采样边元素,细分网格;对于每一条采样边元素,具体步骤如下:
①根据采样边端点坐标和网格边顶点UV坐标将采样边和ae中网格边元素转至普吕克坐标系;
②建立网格边集合inserte;依次遍历ae中各网格边,在普吕克坐标系下,计算网格边与采样边是否相交,如果相交,将该网格边插入集合inserte;
③依次遍历inserte中网格边元素,根据交点生成网格顶点,建立WSF2集合,对于每条网格边,根据该网格边顶点和该采样边端点几何信息,计算网格边与采样边交点的几何信息,并在网格上生成新的顶点vnewb;其中,newb为新顶点生成后网格顶点最大索引值;将vnewb赋值予网格边的SplitVertex变量;将以该网格边为边的面片插入WSF2;
④依次遍历WSF2中面片元素,进行网格细分;细分方式与(1.5)的2)中③相同;
⑤将通过本次细分得到的新的网格边插入ae;
(2)3D浮雕网格重构
(2.1)网格面片颜色属性的标记
1)分别将纹理面片顶点坐标转至与该纹理面片对应的S中的图像像素坐标系下;
2)在图像坐标系下,遍历位于纹理面片内部的像素点,如果像素值为0的像素点数量占所有位于纹理面片内部的像素点数量的εcolor,则将该面片标记为Blackface;同理,如果像素值为255的像素点数量占εcolor,则将该面片标记为Whiteface;εcolor取90%,因误差等因素,可逐渐降低εcolor,直至判断面片颜色属性;
(2.2)网格顶点和网格边属性的标记
第一步,标记网格边和顶点的边缘属性;遍历其中,cne3为变量,随网格边索引最大值变化而变化,值始终与当前网格边索引最大值相等;对于每条网格边,如果以该网格边为边的两个三角面片的颜色属性不一致,则将该网格边标记为Boundaryedge,同时将该网格边的两个端点标记为Boundaryvertex;
第二步,标记网格顶点的颜色属性;遍历其中,cnv3为变量,随网格顶点索引最大值变化而变化,值始终与当前网格顶点索引最大值相等;对于每个网格顶点,如果该顶点没有被标记为Boundaryvertex,说明该顶点的一阶领域三角面片颜色属性相同,且该顶点与一阶领域三角面片颜色属性相同,比如该顶点的一阶领域三角面片颜色属性为Blackface,则将该顶点标记为Blackvertex;
(2.3)网格面片边缘属性的标记
1)依次遍历该面片三个顶点,如果三个顶点都没有被标记为Boundaryvertex,则将该面片标记为NotBoundaryface;如果至少有一个顶点被标记为Boundaryvertex,继续执行(2.3)的2);
2)依次遍历该面片三条边,有以下3种标记情况:
①没有边被标记为Boundaryedge,且该面片颜色属性为Blackface,则将该面片标记为BoundaryInface;
②没有边被标记为Boundaryedge,且该面片颜色属性为Whiteface,则将该面片标记为BoundaryOutface;
③至少有一边被标记为Boundaryedge,则将该面片标记为Boundaryface;
(2.4)网格点环的生成
根据浮雕边缘网格顶点拓扑信息,生成网格点环,具体步骤如下:
1)建立网格边不重复集合ringedge,网格顶点集合ringvertex,依次遍历对于每个网格顶点,如果以该顶点为端点的网格边中,有大于两条网格边被标记为Boundaryedge,将该顶点插入ringvertex;
2)生成网格顶点;依次遍历ringvertex中网格顶点元素,对于每一个网格顶点,遍历以该顶点为端点的所有网格边,对于每一条网格边,在距离(欧式距离)该顶点dist的网格边上计算插值,生成网格顶点vnewd;其中,newd为生成新顶点后网格顶点最大索引值;dist取该网格边长度的εring,εring取2.0*10-5;将vnewd赋值予该网格边的SplitVertex变量;
3)生成网格拓扑信息;依次遍历ringvertex中网格顶点元素,对于每一个顶点,具体步骤如下:
①遍历该顶点的一阶领域三角面片,对于每一个面片,根据网格顶点,建立拓扑信息:
以该顶点为起始顶点,逆时针遍历该面片顶点,分别赋予临时别名v1,v2,v3;以v1和v2为端点的网格边SplitVertex变量值称为SplitVertex1,以v1和v3为端点的网格边SplitVertex变量值称为SplitVertex2;
连接SplitVertex1和SplitVertex1,构成第一条新网格边;连接SplitVertex1和v2,构成第二条新网格边;该面片被分割为三个新面片;
②标记新面片的颜色属性;将该顶点的一阶领域三角面片标记为Whiteface;该顶点的二阶领域三角面片标记为母面片颜色属性;
(2.5)(2.1)-(2.4)的迭代
清除网格顶点,边,面片的边缘属性,迭代进行(2.1)-(2.4),直至所有网格顶点都满足:以该顶点为端点的所有网格边中,有不超过2条被标记为Boundaryedge;
(2.6)浮雕边缘网格和表面网格的重构
第一步,根据被标记为Boundaryvertex生成新的网格顶点;具体步骤如下:
1)建立集合BoundarySetvertex;将中,被标记为Boundaryvertex的顶点插入BoundarySetvertex;其中cnv4随网格顶点索引最大值变化而变化,值始终与当前网格顶点索引最大值相等;
2)生成新的网格顶点;依次遍历BoundarySetvertex中顶点元素,对于每个网格顶点,根据该顶点几何信息,生成新的网格顶点vnewe,其中,newe为生成新顶点后网格顶点最大索引值,vnewe的几何信息计算过程如下:
其中,其中分别为vnewe的模型坐标和UV坐标;分别为该顶点的模型坐标和UV坐标;为该顶点的归一化法线坐标;εrelief在网格归一化的情况下取0.1;为该顶点引入变量Above,并将vnewe赋值予Above;
3)根据网格顶点,建立拓扑信息;具体步骤如下:
①建立浮雕边缘拓扑信息;首先建立BoundarySetedge;依次遍历其中cne4随网格边索引最大值变化而变化,值始终与当前网格边索引最大值相等;对于每一条网格边,如果该网格边被标记为Boundaryedge,将该网格边插入集合BoundarySetedge;
依次遍历BoundarySetedge中网格边元素,对于每一条网格边,暂称以该网格边为边并且颜色属性为Blackface的三角面片为fB,以fB中非该网格边端点的顶点为起点,逆时针遍历,先遍历到的顶点(不包含起点)称为ev1,后遍历到的称为ev2;
新建面片fnew1的顶点为Above1,ev1,Abov2;fnew2的顶点为Above2,ev1,ev2;其中,Above1,Above2分别为ev1,ev2的Above值;new1,new2分别为生成新面片后网格面片最大索引值;
②创建浮雕表面拓扑信息;首先,创建集合reliefface;依次遍历其中,cnf4为当前网格面片最大索引值;将被标记为BoundaryInface和Boundaryface的面片插入reliefface;接着,依次遍历reliefface中的面片元素,对于每个面片,依次遍历该面片的顶点,如果顶点有变量Above且Above不为空值,则用Above值替代该顶点成为新的顶点,所有顶点更改后构成新面片,删除原面片;
(2.7)网格顶点位置的调整
依次遍历所有没有被标记为Boundaryvertex且颜色属性为Blackvertex的网格顶点,对于每个顶点,该顶点新的模型坐标vnewpos计算过程如下:
vnewpos=vpos+εrelief*vnormal (2.3)
其中,vpos为该顶点未调整前的模型坐标;vnormal为该顶点的归一化法线坐标;εrelief在网格归一化的情况下取0.1就得到凸出明显的浮雕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110148219.6A CN112767526B (zh) | 2021-02-03 | 2021-02-03 | 一种适用于纹理贴图的浮雕网格重构方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110148219.6A CN112767526B (zh) | 2021-02-03 | 2021-02-03 | 一种适用于纹理贴图的浮雕网格重构方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112767526A CN112767526A (zh) | 2021-05-07 |
CN112767526B true CN112767526B (zh) | 2022-09-20 |
Family
ID=75704800
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110148219.6A Active CN112767526B (zh) | 2021-02-03 | 2021-02-03 | 一种适用于纹理贴图的浮雕网格重构方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112767526B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113592994B (zh) * | 2021-09-27 | 2021-12-07 | 贝壳技术有限公司 | 用于纹理贴图的方法、装置和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106875495A (zh) * | 2016-12-23 | 2017-06-20 | 合肥阿巴赛信息科技有限公司 | 一种基于凹凸贴图的浮雕网格表示及3d打印切片方法和系统 |
CN111369681A (zh) * | 2020-03-02 | 2020-07-03 | 腾讯科技(深圳)有限公司 | 三维模型的重构方法、装置、设备及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10269148B2 (en) * | 2017-05-01 | 2019-04-23 | Lockheed Martin Corporation | Real-time image undistortion for incremental 3D reconstruction |
-
2021
- 2021-02-03 CN CN202110148219.6A patent/CN112767526B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106875495A (zh) * | 2016-12-23 | 2017-06-20 | 合肥阿巴赛信息科技有限公司 | 一种基于凹凸贴图的浮雕网格表示及3d打印切片方法和系统 |
CN111369681A (zh) * | 2020-03-02 | 2020-07-03 | 腾讯科技(深圳)有限公司 | 三维模型的重构方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112767526A (zh) | 2021-05-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10504284B2 (en) | Method for automatic modeling of complex buildings with high accuracy | |
CN103617603B (zh) | 一种三维数字几何网格模型结构的自动修复方法 | |
CN103559374B (zh) | 一种多子网格模型上进行面分裂型曲面细分的方法 | |
CN111581776B (zh) | 一种基于几何重建模型的等几何分析方法 | |
CN109472870B (zh) | 一种基于网格重构和多影响域修正的模型匹配方法 | |
CN105046735A (zh) | 一种基于基元分布的三维表面纹理合成方法 | |
CN108230452B (zh) | 一种基于纹理合成的模型补洞方法 | |
Zhang et al. | Dual contouring for domains with topology ambiguity | |
CN114611359B (zh) | 一种网格-参数混合模型建模方法和系统 | |
CN112767526B (zh) | 一种适用于纹理贴图的浮雕网格重构方法 | |
CN114529633A (zh) | 一种支持gis线对象和面对象连续lod绘制的方法 | |
CN111028349B (zh) | 一种适用于海量三维实景数据快速可视化的层级构建方法 | |
CN112685935A (zh) | 一种二维多块结构化网格拓扑划分方法 | |
CN116843861A (zh) | 一种三维模型简化方法 | |
Sun et al. | Automatic quadrilateral mesh generation and quality improvement techniques for an improved combination method | |
KR20010046823A (ko) | 정렬되지 않은 3차원 거리 데이터로부터 캐드모델 생성 방법 | |
CN111047687B (zh) | 一种基于三维t样条的异质材料实体建模方法 | |
CN112989679A (zh) | 一种结构引导的六面体网格几何优化方法 | |
CN112364504B (zh) | 基于CT扫描技术和Gabriel图的非均质多孔介质模型构建方法 | |
CN116563490B (zh) | 一种基于刚性映射的全自动四边形附面层网格生成方法 | |
Stoddart et al. | Reconstruction of smooth surfaces with arbitrary topology adaptive splines | |
CN117934751B (zh) | 一种三维隧道模型的构建方法、装置、设备及介质 | |
CN114419055B (zh) | 一种基于高斯像的可展面分割-拟合方法 | |
CN117593485B (zh) | 基于豪斯多夫距离感知的三维模型简化方法及系统 | |
CN116416387B (zh) | Osgb三维模型快速顶层重建方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |