【图形学实验】Loop Subdivision与Modified Butterfly Subdivision
记一下图形学实验的坑
crease是什么
当说一条边是crease edge的时候,我们的意思其实是说这条边是sharp edge.
为的是在Subdivision的时候能够保留一些锐利的部分,例如
![](/assets/blank.gif)
下图中的色边即为标记的sharp edge,标记出来的目的是为了在之后的Subdivision过程中还能保持锐利。
![](/assets/blank.gif)
Loop Subdivision
参考:Piecewise Smooth Surface Reconstruction
Loop Subdivision包含3个阶段:为每条边计算一个新的顶点;更新原有旧顶点的位置;更新网格的拓补结构。
预处理
进行下面的操作之前,需要识别出每一个顶点的类型。
A smooth vertex is one where the number of incident sharp edges s is zero; a dart vertex has s = 1; a crease vertex has s = 2; and a corner vertex has s > 2. Crease vertices are further classified as regular and non-regular depending on the arrangement of smooth edges.An interior crease vertex is regular if it has valence 6 with exactly two smooth edges on each side of the crease; a boundary crease vertex is regular if it has valence 4. All other crease vertices, whether interior or boundary, are non-regular.
将每个点按照crease边的入度s分别划分为normal vertex(s=0)、dart vertex(s=1)、crease vertex(s=2)和corner vertex(s>=3),其中crease vertex根据边的数量以及排列分为regular crease vertex和non-regular crease vertex.
regular crease vertex有两种情况
(a)如果顶点不在边界上(在mesh内部),要求顶点共与6条边相连,且两条crease一边有2条smooth边(即普通边)。如下图:
(b)如果顶点在边界上,那么只要周围相连边的数量为4即是regular
crease vertex中不是regular的就是non-regular
(1)为每条边计算一个新的顶点
根据边上两个端点的类型,查表Table.1,得到的序号去上图找对应的权重分配策略。
注意:只有crease边才需要查表,普通边直接按照下图的smooth edge来计算,边界边两个顶点权重1/2
crease边采取(2)(3)的权重分配方式,最终生成的新顶点必定也会在这条边上,因此就能保持crease边的“锐利”。而smooth edge就会受到周围另外两个顶点的影响,所以会使新生成的点“弓起来”。
(2)更新原有旧顶点的位置
根据顶点的类型来更新其位置。
![](/assets/blank.gif)
(3)更新网格的拓补结构
Modified Butterfly Subdivision
可以参考 : https://www.cnblogs.com/yezhangxiang/archive/2011/04/10/2011284.html
一条边的两个顶点v1和v2,寻找v1和v2各自周围点,根据其连接边的数量不同,采取不同的权重分配策略(共四种)
(a)没什么好说的
(b)当v1和v2其中一个连接边的数量为6,另一个不为6时。不为6的那个点称为k-vertex(上图中是v1),该点的权重为3/4,剩下1/4的权重按该点周围点的数量分配给周围点(v2也是v1的周围点s0)。
注意特殊情况:如果处理的模型是非闭合的,即处理的模型有开口。那么当寻找v1周围的顶点并保存时,应该注意存储顶点的顺序问题(k=4,>=5的情况)
当前处理的边是(v1,v2),假设一向上找周围顶点,找到边(v1,3)遇到边界边停止,想要找剩下的顶点就需要从(v1,v2)向下寻找,找到点的顺序是5,4.在最终存储时需要将向下寻找时找到的点倒序存到123后面才能保证顺序正确。
(c)分别对v1和v2各执行一次b,计算出的两个新顶点取平均值
(d)处理边界边和crease边
先说边界边的情况,下图中红色的为boundary edge,假设当前处理的边为AB,那么就需要找到AC和BD,顶点C和D的权重为-1/16,A和B的权重为9/16
如果处理的是crease边,那么左右两边的数量不一定为1,可能有多条
也可能一条也没有。
如果一条也没有,直接令这一侧的顶点权重为1/2.如果有多条crease边,则让它们平分这-1/16的权重。
【图形学实验】Loop Subdivision与Modified Butterfly Subdivision相关推荐
- 【3维视觉】一文带你学习网格细分Mesh Subdivision算法(Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin)
0.引言 介绍了Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin等网格细分算法. 网格超分技术,换言之曲面细分,是指将一个模型 ...
- Loop subdivision(循环细分) modify butterfly subdivision(改进的蝴蝶细分)算法实现
最近完成了计算机图形学的实验,实现了以halfedge(半边)数据结构为基础的Loop subdivision(循环细分) 和 modified butterfly subdivision(改进的蝴蝶 ...
- 华北电力大学计算机图形学实验报告,华北电力大学计算机图形学实验报告分析.doc...
华北电力大学计算机图形学实验报告分析 科 技 学 院 课程设计(综合实验)报告 ( 2013 -- 2014 年度第 2 学期) 实验名称 OpenGL基本图元绘制实验 课程名称 计算机图形学 | | ...
- 计算机图形学直线扫描转论文,计算机图形学实验报告-实验1直线段扫描转换.doc...
PAGE 32 PAGE 7 计算机图形学 实验报告 班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验一:直线段扫描转换 实验目的 通过本次试验,学生可以掌握直线段的扫描转换算法及其 ...
- 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc
计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...
- 如何用计算机画立方体,画立方体-计算机图形学实验.doc
画立方体-计算机图形学实验.doc (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机图形学实验--画立方体(通过视向变换等)具 ...
- 计算机图形学真实感显示代码,计算机图形学实验 - 真实感图形场景的生成
<计算机图形学实验 - 真实感图形场景的生成>由会员分享,可在线阅读,更多相关<计算机图形学实验 - 真实感图形场景的生成(4页珍藏版)>请在人人文库网上搜索. 1.计算机图形 ...
- 计算机图形学二维图形基本变换实验原理,计算机图形学实验:二维图形变换.docx...
计算机图形学实验:二维图形变换.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验三 二维图形变换一.实验任务1. 通 ...
- 计算机图形学实验——二维卡通人物交互
计算机图形学实验1.2卡通人物交互 OpenGL卡通人物交互 基础"图元"绘制 OpenGL拾取物体 反走样 略提反走样问题 OpenGL实现二维反走样 放缩.旋转和拖动 小结 O ...
- OpenGL南邮计算机图形学实验报告二——两个纹理的渐变变换和移动
OpenGL南邮计算机图形学实验报告二--两个纹理的渐变变换和移动 计算机图形学的新题目要求 OpenGL配置参考: 南邮老前辈wonz哥的OpenGL配置(Shader.h始终不用改).SOIL2 ...
最新文章
- 报错Failed to initialize JPA EntityManagerFactory: Unable to create requested service解决方法
- linux 崩溃文件 coredump 简介
- python使用方法视频-使用Python进行视频处理
- [WebService] xml WebService学习1
- emwin之错误使用控件函数导致死机现象
- react生命周期函数_如何优雅的消灭掉react生命周期函数
- 轻易致盲分类器!普渡大学提出光学对抗攻击算法:OPAD,想法奇特,性能有效!...
- layui 弹出框改变按钮颜色样式 自定义皮肤
- Python中各种括号的区别、用途及使用方法
- 网页上的html表格导出excel表格,网页表格导出至Excel
- httpwatch使用_使用PHP#2自动化HTTPWatch
- Spring框架 编程式事务 事务的传播行为(一)
- ASEMI肖特基二极管MBR10200CT参数,MBR10200CT封装
- 对比PAYPAL和国际信用卡支付的流程
- python 设计模式
- 智能终端信息安全概念(五):硬件安全技术—加密芯片
- java与sqlserver 2008_Java连SqlServer 2008
- .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named
- 安卓开发板烧写程序与安装软件的区别_巧用imx6开发板烧写android系统的详细步骤讲解...
- WinRAR 6.01 官方中文正式版
热门文章
- python乌龟吃鱼_python学习之乌龟吃鱼and思聪吃热狗游戏
- HTTP幂等性及GET、POST、PUT、DELETE的区别
- html怎么命令打开文件夹下,dos下打开文件夹命令 怎么用dos命令进入指定的文件夹...
- 大学计算机基础流媒体,大学计算机基础经典课件.ppt
- 一个牛人给JAVA初学者的建议【转】
- Skyline软件二次开发初级——9如何在WEB页面中的三维地图上进行交互
- TCP 协议报文格式
- c语言是非结构化程序语言_1、C语言是一种结构化程序设计语言
- 显著性分析-秩和检验与校正
- python秩和比综合评价代码记录