三维模型特征提取算法文档格式.docx

上传人:b****4 文档编号:7332240 上传时间:2023-05-08 格式:DOCX 页数:15 大小:17.63KB
下载 相关 举报
三维模型特征提取算法文档格式.docx_第1页
第1页 / 共15页
三维模型特征提取算法文档格式.docx_第2页
第2页 / 共15页
三维模型特征提取算法文档格式.docx_第3页
第3页 / 共15页
三维模型特征提取算法文档格式.docx_第4页
第4页 / 共15页
三维模型特征提取算法文档格式.docx_第5页
第5页 / 共15页
三维模型特征提取算法文档格式.docx_第6页
第6页 / 共15页
三维模型特征提取算法文档格式.docx_第7页
第7页 / 共15页
三维模型特征提取算法文档格式.docx_第8页
第8页 / 共15页
三维模型特征提取算法文档格式.docx_第9页
第9页 / 共15页
三维模型特征提取算法文档格式.docx_第10页
第10页 / 共15页
三维模型特征提取算法文档格式.docx_第11页
第11页 / 共15页
三维模型特征提取算法文档格式.docx_第12页
第12页 / 共15页
三维模型特征提取算法文档格式.docx_第13页
第13页 / 共15页
三维模型特征提取算法文档格式.docx_第14页
第14页 / 共15页
三维模型特征提取算法文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

三维模型特征提取算法文档格式.docx

《三维模型特征提取算法文档格式.docx》由会员分享,可在线阅读,更多相关《三维模型特征提取算法文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

三维模型特征提取算法文档格式.docx

定义一:

模型中任意两个三角形存在公共边,则称两个三角形紧邻。

定义二:

模型中任意两个三角形存在公共顶点,则称两个三角形邻接。

定义三:

如果存在一组三角形它们具有邻接关系(紧邻、邻接)并且归一化法向量全等则

这一组三角形在同一个平面上。

定义四:

如果存在一组三角形它们具有邻接关系(紧邻、邻接)并且归一化法向量处于某个平面上则这组三角形处在同一个柱面上。

定义五:

归一化法向量,满足公式:

关于其他形状的定义大家可以自己总结(如球面、圆柱面、圆锥面等等),这里只给出

平面和一般柱面(多面体、圆锥面、圆柱面都是柱面)的定义。

下面给出一个平面获取的例

子:

粉红色区域为三角形组成的平面15边形,法向量平行(归一化法向量相等)。

在图形中可以看到,在模型的所有三角形中可以确定这样一组三角形,它们共同组成了粉红色区域,即在粉红色区域上取任意三角形作为起始,搜索模型中所有三角形能够确定一组与起始三角形归一化法向量相等且相邻。

三、特征提取算法介绍

为了简洁起见,在此只讨论“曲面提取”算法,关于拉伸凸台等算法大家可以自己去推算,其实有了表面提取算法其他特征的提取也并不复杂。

下面详细介绍这个算法。

算法定义:

在模型的所有三角形中搜索满足邻接条件的、法向量满足特定数学方程的三角形集合。

(本定义只能满足归一化法向量)

1、类定义如下:

(1)定义一个三角形或多边形的边

Edge{

Vertext*v1;

//边的第一个顶点

Vertext*v2;

//边的第二个顶点

Triangle*owned_triangle;

//所属的三角形

(2)定义一个三角形

Triangle{

Vertex*v1;

//三角形的第一个顶点

Vertex*v2;

//三角形的第二个顶点

Vertex*v3;

//三角形的第三个顶点

Edge

e1;

//三角形的第一条边

e2;

//三角形的第二条边

e3;

//三角形的第三条边

Normal*normal;

//三角形的法向量

Surface*owned_surface;

//所属的曲面

(3)定义一个表面

Surface{

Vector<

Triangle*>

tri_buf;

//一个表面包含的三角形集合

Edge*>

edge_buf;

//一个表面包含的边(包含三角形的边

//不一定是表面的边)

(4)Vector<

Triangle>

all_triangle_buf;

//存储模型包含的所有三角形。

2、表面搜索算法

表面搜索算法大致可以分为两个步骤:

第一步,在模型包含的所有三角形中搜索符合相

同数学方程的三角形。

第二步,判断搜索到的三角形是否有邻接关系,如果有添加到要搜索

的表面,如果没有则抛弃。

Surface*buildSurface(Triangle*

pSeed,Vector<

*

all_triangle){

Surface*surface=newSurface();

surface->

addTriangle(pSeed);

std:

:

vector<

buf;

/*查找所有符合法线相等条件的三角形*/

for(unsignedinti=0;

i<

all_triangle.size();

i++)

{

Triangle*tri=all_triangle);

//判断两个向量是否满足特定方程,这一步尤为重要

//isConsistent()方法可以重载多个以便分别求解平面、

//柱面、球面等数学定义。

if(isConsistent(pSeed->

getNormal(),tri->

getNormal())

&

tri->

getOwnedSurface()==NULL){

buf.push_back(tri);

}

//在符合法线相等的三角形中查找和平面邻接的三角形

//找到的三角片虽然都符合同一个数学方程算法,但是

//它们未必处在同一个曲面上(如两个曲面平行),所以

//要进一步判定它们的邻接关系。

Triangle*tri=getAdjacencyTriangle(surface,&

buf);

for(;

tri!

=NULL;

){

addTriangle(tri);

//

如果是邻接三角形则添加到曲面上

rebuild();

//添加完三角形后需要重新构建平面

//以便确定曲面的边

tri=getAdjacencyTriangle(surface,&

//本方法确定曲面的边和所有

//符合特定数学方程三角形的

//邻接关系。

returnsurface;

四、STL文件的表示格式

本节将详细介绍STL文件的格式。

以便于大家分析。

大家可以编制文件读取程序直接将STL文件中Outerloop关键字包含的顶点信息和Facetnormal关键字包含的法向量信息创建成第三节中介绍的Triangle类。

然后,将Triangle和法向量信息放到osg:

Geometry类中进而显示在osg:

Viewer中。

简洁起见,读取程序不再讨论。

1、介绍

STL是固体界面描述语言(StereolithographyInterfaceLanguage)的缩写,是一种快速成型标准。

任意表面的图元是三角形,三角形的法向量遵循逆时针轮廓方向。

2、关键字

Solid

Facet

Normal

Outer

Loop

Vertex

Endloop

Endfacet

Endsolid

3、语法

Solid[partname]

Facetnormalvaluevaluevalue

Outerloop

Vertexvaluevaluevalue

…..

Endsolid[partname]

4、正方体样例

solid

facetnormal0.0000001.0000000.000000

outerloop

vertex1.0000001.0000001.000000

vertex1.0000001.000000-1.000000

vertex-1.0000001.000000-1.000000

endloop

endfacet

vertex-1.0000001.0000001.000000

facetnormal0.0000000.0000001.000000

vertex-1.000000-1.0000001.000000

vertex1.000000-1.0000001.000000

facetnormal1.0000000.0000000.000000

vertex1.000000-1.000000-1.000000

facetnormal0.0000000.000000-1.000000

vertex-1.000000-1.000000-1.000000

facetnormal0.000000-1.0000000.000000

facetnormal-1.0000000.0000000.000000

endsolid

五、使用OSGConv对STL文件转换后的OSG文件格式

在文件格式中我们只保留的顶点和法线向量定义部分,可以发现定点数正好是法线向量数的三倍(VertexArrayVec3Array840,NormalArrayVec3Array280),三个顶点(一个三角形)对应一个法线向量。

大家可以编制和STL文件类似的程序来读取OSG文件以便生成全部三角形。

值得注意的是不是所有OSG文件都是这样的存储方法,大家应该因地制宜编制自己需要的程序。

STL文件通过osgConv转换后的结果至少是这样。

osgExp输出的结果需要大家自己分析了。

Geode{

Geometry{

VertexArrayVec3Array840

//第一个三角形的顶点

25.590976.977556

6.7361282.489556

21.966170.446856

//第二个三角形的顶点

3.0282374.036456

….

NormalBindingPER_PRIMITIVE

NormalArrayVec3Array280

001

//第一个三角形的normal

//第二个三角形的normal

六、在OSG中抽取“齿轮”表面的样例程序

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2