VCGLib讲述.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VCGLib讲述

 HYPERLINK /youthlion/archive/2012/04/21/2461025.html VCGLib中邻接关系的实现 VCGLib中邻接关系的维护依赖于各种单形中存储的相关信息。在VCGLib中几乎所有的算法实现都假设存在vcg::face::VertexRef,该属性存储了三个指向顶点对象的指针,可以通过V()函数访问。 面-面邻接关系 面之间的邻接关系存储于vcg::face::FFAdj(正四面体为vcg::face::TTAdj),该属性通过边来记录面之间的邻接关系。下图显示了两个三角形面: 图中顶点编号从0到2,以逆时针顺序编号,边i(i=0..2)的两个端点分别为i和(i+1)%3,因此图中面f0和面f1的公共边对f0而言是0,对f1而言是1。 对于面f的每个边e,vcg::face::FFAdj存储以下信息: FFp(e):指向共享边e的面的指针,若e是border,则该指针指向自己; FFi(e):在指向的面中e的索引。 例如在上图中,有: f1-FFp(1) == f0 f1-FFi(1) == 0 f0-FFp(0) == f1 f0-FFi(0) == 1 VCGLib中对于非流形的情况也有考虑,因为只是想简单了解,没有看。 Pos 三角网格中,Pos为一三元组,pos = {v,e,f},e是f的边,v是e的端点。下图以小三角形的形式显示了三角网格中的一些pos,在每个面中,每个小三角形指向一个顶点,倚靠一条边。这样就能保证任意给定一个pos c,若只改变c的三元组的一个分量,能够唯一确定一个邻居pos。 从一个pos移动到该pos的一个邻居的操作称为Flip,把改变顶点,边和面的Flip操作分别记做FlipV,FlipE和FlipF。 例如,对于上图中的c0而言,其三元组中除了顶点,其他分量都相同的pos只有一个,即c2。记c2 = FlipV(c1)。 类似地,有: c2 = FlipV(c1) c0 = FlipE(c1) c3 = FlipF(c0) 环绕v逆时针遍历: c4 = FlipE(FlipF(c0)) c5 = FlipE(FlipF(c4)) 在border上的情况: c6 = FlipE(FlipF(c5)) 环绕v顺时针遍历: c3 = FlipE(FlipF(c6)) c1 = FlipE(FlipF(c3)) border: c0 = FlipE(FlipF(c1)) 可以发现,当两个flip嵌套操作的时候,根据pos与面的关系,可以实现顺时针或逆时针的pos转换。并且由于面-面邻接关系的定义方式,当pos在border上的时候,FlipF操作会返回到pos本身所在的面。 下面的例子展示了如何使用pos在顶点周围迭代 /* vcglib/apps/sample/trimesh_pos_demo/trimesh_pos_demo.cpp */ ? #include vcg/simplex/face/pos.h // include the definition of pos ? //...includes to define your mesh type ? //class MyVertex: ... class MyFace: public vcg::FaceSimp2MyVertex,MyEdge,MyFace, vcg::face::VertexRef, vcg::face::FFAdj{}; ? void OneRingNeighborhood( MyFace * f) { MyVertex * v = f-V(0); MyFace* start = f; vcg::face::PosMyFace p(f,0,v); // constructor that takes face, edge and vertex do { p.FlipF(); p.FlipE(); }while(p.f!=start); } Jumping Pos Jumping Pos类似Pos,但在遇到border的时候不会反弹回去,而是跨到下一个border-face上去。下面这个例子中,上图中的p会从f0跨到f2。 /* vcglib/apps/sample/trimesh_pos_demo/trimesh_pos_demo.cpp */ ? #include vcg/simplex/face/jumping_pos.h // include the definition of jumping pos ? //...includes to define your mesh type ? //class MyVertex:

文档评论(0)

jiayou10 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档