网格数据结构

1 网格数据应用
渲染
集合查询(某个面的顶点有哪些,两个点是否相连等)
几何操作(添加、删除某个点/线/面;网格化简;顶点分裂,边缘折叠)
2 网格数据的存储
一般的网格存储(很难有效实现)
什么是好的数据存储?(空间复杂度,时间(构建时间,查询时间,修改时间),时间空间的权衡,冗余)
3 定义一个网格
几何上(顶点坐标)
连通
表面及材料属性(材料颜色Material color,周围环境Ambient,高光系数hightlight coefficients,纹理坐标Texture coordinates,双向反射分布函数BRDF,双向纹理函数BTF)
渲染属性(光照,法向,渲染模型)
4 常用网格文件
wavefont OBJ(*.obj),
3D Max (*.max, *.3ds),
VRML(*.vrl),
nventor (*.iv),
PLY (*.ply, *.ply2),
User‐defined(*.m, *.liu)
5 边表

 

优点:方便快捷,可以表示非流形网格

缺点:太简单,不能表达边和点之间的关系

6 邻接矩阵
将网格看成连通图
对给定的n个点,构造一个n*n的邻接矩阵,如果点i和点j相连则(i,j)的值为true
几何信息(点的坐标)
添加一个面:顶点指标三元组(v1,v2,v3)


优点:1、存储了点之间的连通性;2、可以存储非流性网格

 

缺点:有面对点的联系,没有点对面的联系

7 双连通边表(DCEL)
记录每一个面,每一条边,每一个点(几何信息,拓普信息,属性信息),半边结构

点记录:点v的坐标;指向以点v作为起点的半边的的指针
面记录:指向面f边界的半边的指针
边记录:指向边e起始点的指针origin(e);指向他的双胞胎半边的指针twin(e);指向该边左边的面的指针IncFace(e);IncFace(e)的上一条边prev(e)和下一条边next(e);

 

 


例子:


优点:所有的查询时间复杂度都为O(1);通常情况下,所有的操作时间复杂度都为O(1)。

 

缺点:只能表示流型网格

8 角表(Corner Table)
角c包含的信息有:

c.t:角c所在的三角形
c.v:角c所对的点
c.n:c.t中角c逆时针方向的下一个角
c.p:c.t中角c逆时针方向的上一个角
c.o:与c相对的角
c.r:角c右边的角 == c.n.o
c.l:角c左边的角 == c.p.o

 

 


例子:

优点:所有的查询时间复杂度都为O(1);通常情况下,所有的操作时间复杂度都为O(1)。

缺点:只能表示流型网格;高冗余(但可以接受)
————————————————
版权声明:本文为CSDN博主「一滴风Echo」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/EchoWenyu/article/details/83350269

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值