OpenMesh说明.docx
- 文档编号:29315512
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:12
- 大小:2.12MB
OpenMesh说明.docx
《OpenMesh说明.docx》由会员分享,可在线阅读,更多相关《OpenMesh说明.docx(12页珍藏版)》请在冰豆网上搜索。
OpenMesh说明
法向
计算遍历所有面上的法向
mesh.request_face_normals();
mesh.update_face_normals();
for(autoit=mesh.face_begin();it!
=mesh.face_end();++it)
{
Autoface=it.handle();
MyMesh:
:
Normalnamal=mesh.normal(face);
doublex=normal.data()[0];
doubley=normal.data()[1];
doublez=normal.data()[2];
}
mesh->calc_edge_length (HalfedgeHandle_heh)const
Calculatesthelengthoftheedge_heh.
计算边的长度,参数可以是边也可以是半边
autohalfEdgesHandle=mesh->halfedge_handle(edgesHandle,0);
边转半边
mesh->split(edges,midpVetexHandle);
用点切分边
boolOpenMesh:
:
PolyConnectivity:
:
is_collapse_ok(HalfedgeHandle _he)
Returnswhethercollapsinghalfedge_hehisokorwouldleadtotopologicalinconsistencies.
例子:
if(collapse_ok&&mesh->is_collapse_ok(halfEdgeHandle))
{
mesh->collapse(halfEdgeHandle);
finishd=false;
}
对边进行折叠,就是删除一条边,相当于两边点的定点折叠,相当于删除一个6边区域
mesh->garbage_collection(true);//删除孤立的点
mesh->next_halfedge_handle(halfEdgeHandle)//寻找下一条边
mesh->next_halfedge_handle()//寻找下一条边界
uint valence (VertexHandle _vh)const
Vertexvalence.
valenceofvertex 点价;点的度
boolis_flip_ok(EdgeHandle_eh)const
Checkwhetherflipping_ehistopologicallycorrect.
检查是否翻转呃是拓扑正确的
voidOpenMesh:
:
TriConnectivity:
:
flip(EdgeHandle_eh)
Flipedge_eh.
Checkfortopologicalcorrectnessfirstusingis_flip_ok().
检查拓扑的正确性首先使用is_flip_ok()
【OpenMesh】一些基本操作:
翻转和折叠
2013年03月02日 ⁄综合 ⁄共2767字⁄字号 小 中 大 ⁄ 评论关闭
这一节中你将学到一些OpenMesh中早已提供的基础操作。
内容包括三角形网格边的翻转以及通过连接邻接的顶点边缘折叠。
三角形网格的翻转(Flippingedges)
考虑到两个邻接面的三角形网格中存在两种不同内部边缘设置。
调用函数OpenMesh:
:
TriConnectivity:
:
flip(EdgeHandle_eh)将翻转特定的边到其相反的方向,如下图所述。
下面的代码段演示了如何在程序中使用这个函数:
TriMeshmesh;
//Addsomevertices
TriMesh:
:
VertexHandlevhandle[4];
vhandle[0]=mesh.add_vertex(MyMesh:
:
Point(0,0,0));
vhandle[1]=mesh.add_vertex(MyMesh:
:
Point(0,1,0));
vhandle[2]=mesh.add_vertex(MyMesh:
:
Point(1,1,0));
vhandle[3]=mesh.add_vertex(MyMesh:
:
Point(1,0,0));
//Addtwofaces
std:
:
vector : VertexHandle>face_vhandles; face_vhandles.push_back(vhandle[2]); face_vhandles.push_back(vhandle[1]); face_vhandles.push_back(vhandle[0]); mesh.add_face(face_vhandles); face_vhandles.clear(); face_vhandles.push_back(vhandle[2]); face_vhandles.push_back(vhandle[0]); face_vhandles.push_back(vhandle[3]); mesh.add_face(face_vhandles); //Nowtheedgeadjacenttothetwofacesconnects //vertexvhandle[0]andvhandle[2]. //Findthisedgeandthenflipit for(TriMesh: : EdgeIterit=mesh.edges_begin();it! =mesh.edges_end();++it){ if(! mesh.is_boundary(it.handle())){ //Flipedge mesh.flip(it.handle()); } } //Theedgenowconnectsvertexvhandle[1]andvhandle[3]. 边缘折叠(Collapsingedges) 这一节中你将学到如何进行边缘折叠比如连接两个邻接顶点。 OpenMesh提供函数OpenMesh: : PolyConnectivity: : collapse(HalfedgeHandle_heh)实现这一功能。 这会折叠halfedge的起始顶点(halfedge直接指向的方向)到结束顶点,如下图所述。 注意边缘折叠会导致网格拓扑不一致。 你应该在边缘折叠之后验证一致性,通过调用OpenMesh: : PolyConnectivity: : is_collapse_ok()。 简单的代码例子: PolyMeshmesh; //Addsomeverticesasintheillustrationabove PolyMesh: : VertexHandlevhandle[7]; vhandle[0]=mesh.add_vertex(MyMesh: : Point(-1,1,0)); vhandle[1]=mesh.add_vertex(MyMesh: : Point(-1,3,0)); vhandle[2]=mesh.add_vertex(MyMesh: : Point(0,0,0)); vhandle[3]=mesh.add_vertex(MyMesh: : Point(0,2,0)); vhandle[4]=mesh.add_vertex(MyMesh: : Point(0,4,0)); vhandle[5]=mesh.add_vertex(MyMesh: : Point(1,1,0)); vhandle[6]=mesh.add_vertex(MyMesh: : Point(1,3,0)); //Addthreequadfaces std: : vector : VertexHandle>face_vhandles; face_vhandles.push_back(vhandle[1]); face_vhandles.push_back(vhandle[0]); face_vhandles.push_back(vhandle[2]); face_vhandles.push_back(vhandle[3]); mesh.add_face(face_vhandles); face_vhandles.clear(); face_vhandles.push_back(vhandle[1]); face_vhandles.push_back(vhandle[3]); face_vhandles.push_back(vhandle[5]); face_vhandles.push_back(vhandle[4]); mesh.add_face(face_vhandles); face_vhandles.clear(); face_vhandles.push_back(vhandle[3]); face_vhandles.push_back(vhandle[2]); face_vhandles.push_back(vhandle[6]); face_vhandles.push_back(vhandle[5]); mesh.add_face(face_vhandles); //Nowfindtheedgebetweenvertexvhandle[2] //andvhandle[3] for(PolyMesh: : HalfedgeIterit=mesh.halfedges_begin();it! =mesh.halfedges_end();++it){ if(to_vertex_handle(it.handle())==vhandle[3]&& from_vertex_handle(it.handle())==vhandle[2]){ //Collapseedge mesh.collapse(it.handle()); break; } } //Ourmeshnowlookslikeintheillustrationaboveafterthecollapsing.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenMesh 说明