您当前的位置: 首页 >  flashinggg

Houdini中的half-edge

flashinggg 发布时间:2022-02-23 15:26:10 ,浏览量:1

目录

参考

Half Edge概念 

网格属性

顶点(vertex)

边(edge)

等价(Equivalence)

Houdini中的VEX functions

1.hedge_dstpoint/hedge_srcpoint

2.hedge_dstvertex/hedge_srcvertex

3.hedge_equivcount

4.hedge_next

5.hedge_nextequiv

6.hedge_isequiv

7.hedge_prim

8.pointedge

9.pointhedge

10.primhedge

11.vertexhedge

参考

 Half-edges (sidefx.com)

flipcode - 半边数据结构

Half Edge数据结构有什么优点? - 知乎 (zhihu.com)

Half Edge概念 

Half Edge结构即半边结构,是网格数据结构的其中一种表达方式,可在建模软件中储存多边形(另外两种用于储存多边形的数据结构是:Polygon Soup和incidence matrice,其中polygon的储存开销远小于其他两种)。Half Edge是个有向图,把一条边表示成两个有向的半边(如图),由于Half Edege构造需要一定的开销,因此一般都用下图iTriMesh三角网格这种简单的网格表达方式。

网格属性

由顶点(vertex)、边(edge)和面(primitive)三个元素组成,Houdini中可操作的常用属性(attribute value)就是这三个。

顶点(vertex)

起点(source vertex)和终点(destination vertex),由于同一个point可以充当很多的vertices,因此half-edges可以有相同的起点和终点。

边(edge)

可以是边界边(the boundary edge):边界上的边,邻接面为1,且这个边的half-edge为1;

内部边(interior edge):edge有的half-edge数量为2;

非流形边(non-manifold edge):这样的edge存在与non-manifold mesh网格中,如下图:

等价(Equivalence)

如果两个半边(two half-edges)是从同一个边(edge)分离出来的,则这两个半边等价(equivalent),等价的半边可能有相反的方向;从顶点的角度可以说:如果两个半边的顶点位置相同,那它们是是等价的。

Houdini中的VEX functions 1.hedge_dstpoint/hedge_srcpoint

hedge_dstpoint (sidefx.com)

hedge_dstpoint(“defgeo.bgeo”,3); //从几何体中得到3号半边终点位置的point number

2.hedge_dstvertex/hedge_srcvertex

hedge_dstvertex (sidefx.com)

hedge_dstvertex("defgeo.bgeo",3); //从几何体中得到3号半边终点位置的vertex number

3.hedge_equivcount

hedge_equivcount (sidefx.com)

hedge_equivcount(geometry,hedge_number); //返回跟hedge等价的半边的数量(包括这个半边所以返回的数目至少是1)

这个function可以用来判断这个半边所属的edge的类型,是几何体的边界(return 1)?还是内部边(returns 2)?还是这个网格划分不行(即是非流形的,returns ≥3)

4.hedge_next

hedge_next (sidefx.com)

hedge_next(geometry,hedge_number); //返回在网格划分中顺序排在当前半边下一个的半边的number(下一个hedge的起点是当前hedge的终点)

5.hedge_nextequiv

hedge_nextequiv (sidefx.com)

hedge_nextequiv(geometry,hedge_number); //返回下一个等价的hedge,如果没有等价的,则返回hedge自己

6.hedge_isequiv

hedge_isequiv (sidefx.com)

hedge_isequiv(geometry,hedge1_num,hedge2_num); //两个hedges是否等价,是返回1。

7.hedge_prim

hedge_prim (sidefx.com)

hedge_prim(geometry,hedge_num); //返回hedge所在的面的primitive number

8.pointedge

pointedge (sidefx.com)

pointedge(geometry,point1_num,point2_num); //1、2之间有edge存在则返回number,没有则返回-1.

9.pointhedge

pointhedge (sidefx.com)

pointhedge(geometry,point); //返回以point为起点的hedge

pointhedge(geometry,srcpoint,dstpoint);// 返回srcpoint为起点和dstpoint为终点的hedge

10.primhedge

primhedge (sidefx.com)

primhedge(geometry,prim_num); // 返回面上任意一个hedge的num

11.vertexhedge

vertexhedge (sidefx.com)

vertexhedge(geometry,vertex); // 返回以这个vertex为起点的hedge的number

关注
打赏
1688896170
查看更多评论

flashinggg

暂无认证

  • 1浏览

    0关注

    83博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3655s