记一下图形学实验的坑

crease是什么

当说一条边是crease edge的时候,我们的意思其实是说这条边是sharp edge.

为的是在Subdivision的时候能够保留一些锐利的部分,例如

正常的Loop Subdivision

下图中的色边即为标记的sharp edge,标记出来的目的是为了在之后的Subdivision过程中还能保持锐利。

添加了对crease处理的Loop Subdivision

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 vertexnon-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)更新原有旧顶点的位置

根据顶点的类型来更新其位置。

图中数值为权重

(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相关推荐

  1. 【3维视觉】一文带你学习网格细分Mesh Subdivision算法(Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin)

    0.引言 介绍了Loop, Butterfly, Modified Butterfly, Catmull-Clark, Doo-Sabin等网格细分算法. 网格超分技术,换言之曲面细分,是指将一个模型 ...

  2. Loop subdivision(循环细分) modify butterfly subdivision(改进的蝴蝶细分)算法实现

    最近完成了计算机图形学的实验,实现了以halfedge(半边)数据结构为基础的Loop subdivision(循环细分) 和 modified butterfly subdivision(改进的蝴蝶 ...

  3. 华北电力大学计算机图形学实验报告,华北电力大学计算机图形学实验报告分析.doc...

    华北电力大学计算机图形学实验报告分析 科 技 学 院 课程设计(综合实验)报告 ( 2013 -- 2014 年度第 2 学期) 实验名称 OpenGL基本图元绘制实验 课程名称 计算机图形学 | | ...

  4. 计算机图形学直线扫描转论文,计算机图形学实验报告-实验1直线段扫描转换.doc...

    PAGE 32 PAGE 7 计算机图形学 实验报告 班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验一:直线段扫描转换 实验目的 通过本次试验,学生可以掌握直线段的扫描转换算法及其 ...

  5. 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc

    计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...

  6. 如何用计算机画立方体,画立方体-计算机图形学实验.doc

    画立方体-计算机图形学实验.doc (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机图形学实验--画立方体(通过视向变换等)具 ...

  7. 计算机图形学真实感显示代码,计算机图形学实验 - 真实感图形场景的生成

    <计算机图形学实验 - 真实感图形场景的生成>由会员分享,可在线阅读,更多相关<计算机图形学实验 - 真实感图形场景的生成(4页珍藏版)>请在人人文库网上搜索. 1.计算机图形 ...

  8. 计算机图形学二维图形基本变换实验原理,计算机图形学实验:二维图形变换.docx...

    计算机图形学实验:二维图形变换.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验三 二维图形变换一.实验任务1. 通 ...

  9. 计算机图形学实验——二维卡通人物交互

    计算机图形学实验1.2卡通人物交互 OpenGL卡通人物交互 基础"图元"绘制 OpenGL拾取物体 反走样 略提反走样问题 OpenGL实现二维反走样 放缩.旋转和拖动 小结 O ...

  10. OpenGL南邮计算机图形学实验报告二——两个纹理的渐变变换和移动

    OpenGL南邮计算机图形学实验报告二--两个纹理的渐变变换和移动 计算机图形学的新题目要求 OpenGL配置参考: 南邮老前辈wonz哥的OpenGL配置(Shader.h始终不用改).SOIL2 ...

最新文章

  1. 报错Failed to initialize JPA EntityManagerFactory: Unable to create requested service解决方法
  2. linux 崩溃文件 coredump 简介
  3. python使用方法视频-使用Python进行视频处理
  4. [WebService] xml WebService学习1
  5. emwin之错误使用控件函数导致死机现象
  6. react生命周期函数_如何优雅的消灭掉react生命周期函数
  7. 轻易致盲分类器!普渡大学提出光学对抗攻击算法:OPAD,想法奇特,性能有效!...
  8. layui 弹出框改变按钮颜色样式 自定义皮肤
  9. Python中各种括号的区别、用途及使用方法
  10. 网页上的html表格导出excel表格,网页表格导出至Excel
  11. httpwatch使用_使用PHP#2自动化HTTPWatch
  12. Spring框架 编程式事务 事务的传播行为(一)
  13. ASEMI肖特基二极管MBR10200CT参数,MBR10200CT封装
  14. 对比PAYPAL和国际信用卡支付的流程
  15. python 设计模式
  16. 智能终端信息安全概念(五):硬件安全技术—加密芯片
  17. java与sqlserver 2008_Java连SqlServer 2008
  18. .d.s.w.r.o.CachingOperationNameGenerator : Generating unique operation named
  19. 安卓开发板烧写程序与安装软件的区别_巧用imx6开发板烧写android系统的详细步骤讲解...
  20. WinRAR 6.01 官方中文正式版

热门文章

  1. python乌龟吃鱼_python学习之乌龟吃鱼and思聪吃热狗游戏
  2. HTTP幂等性及GET、POST、PUT、DELETE的区别
  3. html怎么命令打开文件夹下,dos下打开文件夹命令 怎么用dos命令进入指定的文件夹...
  4. 大学计算机基础流媒体,大学计算机基础经典课件.ppt
  5. 一个牛人给JAVA初学者的建议【转】
  6. Skyline软件二次开发初级——9如何在WEB页面中的三维地图上进行交互
  7. TCP 协议报文格式
  8. c语言是非结构化程序语言_1、C语言是一种结构化程序设计语言
  9. 显著性分析-秩和检验与校正
  10. python秩和比综合评价代码记录