计算机图形学笔记十:Geometry3(网格处理)

1.网格

在这里插入图片描述

2.网格细分(Mesh subdivision)

网格细分是指将一个模型的面合理的分成更多小的面,从而提升模型精度,提高渲染效果,让物体更加趋近于真实世界。
在这里插入图片描述

2.1Loop细分法(Loop Subdivision)

将每个三角形从各边中点划分成四个三角形,不断重复步骤,最终得到一个更加圆润光滑的物体:
在这里插入图片描述
具体细分步骤:
Step1:细分(连接各边中点,将一个三角形变成四个小三角形)
在这里插入图片描述
Step2:调整新顶点
在这里插入图片描述
一般情况下,新顶点(图中的白点)会被两个三角形共享,设新顶点所在边的顶点为A,B,不在的为C,D;
白点现在的位置取A、B的3/8加上C、D的1/8位置(加权平均),因此一般认为在该点所在共享边上的点对该点的影响较大,而其它的两个顶点影响较小;
Step3:调整旧顶点
在这里插入图片描述
旧顶点 (图中白点)以自身原来的位置和周围其它点的位置来决定自己的新位置,其中 n n n是本身的度(度即边的数量,如下图中白点度为6), u u u是某个和度相关的数(规定如果 n = 3 n=3 n=3,那么 u = 3 / 16 u=3/16 u=3/16;否则, u = 3 / ( 8 n ) u=3/(8n) u=3/(8n));
旧顶点的新位置: ( 1 − n ∗ u ) ∗ 原 来 的 位 置 + u ∗ 相 邻 点 的 位 置 平 均 (1-n*u)*原来的位置+u*相邻点的位置平均 (1nu)+u

2.2Catmull-Clark细分(Catmull-Clark Subdivision)

Loop细分只是针对三角形构成的图形,而如果遇到了其它形状组成的图形时,可以用Catmull-Clark细分法。
具体细分步骤:
Step1:在非四边形面中添加顶点,在非四边形面的边上添加中点
在这里插入图片描述
Step2:连接所有新顶点
在这里插入图片描述
此时多出来两个度为3的奇异点(中间紫色圆点),同时所有的非四边形面都消失了。
第一次细分后:

  • 有几个非四边形面,就会多出几个奇异点,现在一共有2+2=4个;
  • 新多出来的奇异点的度数与原来非四边形的边数相等;
  • 若第一次细分后,没有出现新的非四边形面,那么就不会出现新的奇异点。

之后再做细分:(不会增加奇异点,非四边形面数量则始终为0
在这里插入图片描述
点的更新方式:
在这里插入图片描述
Loop细分和Catmull-Clark细分对比:
在这里插入图片描述

3.网格简化(Mesh Simplification)

网格简化是指将一个模型的面合理的减少,从而降低模型精度。
在这里插入图片描述

3.1边坍缩(Collapsing An Edge)

简单来说就是将一条边的两个顶点合成为一个顶点;
在这里插入图片描述
但是,如果坍缩一条边,那么与之相连的变也会发生变化,这就会导致模型原本的样子发生变化。
解决方法:引入 二次误差度量(Quadric Error Metrics)
即需要寻找到一个点,使这个点到与他邻近的面的距离平方和最小,则该点就是坍缩到的点:
在这里插入图片描述
具体坍缩步骤:
在这里插入图片描述
上述即为贪心算法(用局部最小,而不是全局最小)
以上操作为动态操作,涉及到优先级,因此使用的是优先级队列或堆的数据结构。
最终边坍缩效果:
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值