【图形学】Loop细分算法及半边结构实现(C++)

本文原理参考: GAMES101课程 ,基于Unity3D的Loop Subdivision 网格细分算法

本文复现参考:Loop subdivision,三角网格下的Half-Edge数据结构实现方法
本文代码链接:https://pan.baidu.com/s/1R_Wn4iqBadGKxjFT8NgpsA 提取码:9x9i

Loop 细分

顾名思义,网格细分是将粗糙网格精细化的过程,如下动图。Loop细分是众多网格细分算法的一种,Loop细分仅仅对三角形网格模型有效。值得注意的是,虽然叫Loop细分,但是不能理解为“循环”细分,叫这个名字是因为作者的名字是这个而已。

11 11

算法介绍

Loop细分算法主要分两步进行

  1. 增加新顶点:增加三角形三个边的中点,将一个三角形分成四个三角形
    在这里插入图片描述

  2. 移动新的三角形和老的三角形顶点让细分之后的结果更加光滑

在介绍具体的算法过程之前,先介绍一些概念:

边界边:处于三角形网格边界的边,只被网格中的一个三角形占用。

内部边:处于三角形网格内部的边,被网格中的两个三角形(最多只有两个)占用。

边界点:边界边的两个顶点为边界点。

内部点:除了边界点的所有点为内部点。

下面一图涵盖所有定义:绿色框和红色框分别表示边界点和内部点,绿色标记和红色标记分别表示边界边和内部边
11

增加新顶点

通过在每个边上取中点,从而增加顶点,根据边的属性(边界,非边界)有如下两个计算新增顶点位置的规则:

  1. 内部边上增加点
image-20201018154549003

计算规则: v = 3 / 8 ∗ ( v 0 + v 1 ) + 1 / 8 ∗ ( v 2 + v 3 ) v=3 / 8^{*}\left(v_{0}+v_{1}\right)+1 / 8^{*}\left(v_{2}+v_{3}\right) v=3/8(v0+v1)+1/8(v2+v3)

  1. 边界边上增加点
    image-20201018154549003
    计算规则:
  • 26
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值