11.几何(曲线与曲面)

曲线

1.Bézier Curves 贝塞尔曲线.

angents(切线)来定义贝塞尔曲线,规定了起点和终点必须是p0和p3,起始方向必须沿着p0p1方向,终点方向必须沿着p2p3方向

2. de Casteljau Algorithm(算法)

如何用任意多个点画出一条贝塞尔曲线

三个点的情况,假设t代表了时间t的时候贝塞尔曲线的点经过了时间t的位置,分别在三个点的取前1/3的位置的点相连,然后在连线上取1/3的位置标记点就是所求的点。四个点的也是同理,只要最后只能求到一个点的时候就是所求的点,只要枚举出所有时间的点,就可以画出这条曲线

3. 贝塞尔曲线的代数表示

当t等于时,位置在b0,t=1时,位置在b1

总结:

可以推出代数式的诶个系数是由伯恩斯坦多项式得来的,常量就是b0到bn,系数感觉可以理解为(1-t+t)的n次方的结果的指数逐渐下降

4.贝塞尔曲线的性质

(1)必过起点、终点

(2) 起始点和终点的切线方向如图所示(根据点的数量系数会不同)

(3)仿射变换下:

对一条贝塞尔曲线的顶点做仿射变换再画出赛贝尔曲线

= 原曲线每一个点做仿射变换后得到贝塞尔曲线

(4)凸包性质:

①什么是凸包

一个直观的定义:把最外边的黑点看做钉子,用一条橡皮筋包住最外边的钉点,再松手,橡皮筋收缩后就是这个外框(凸包)

②性质

任何一个贝塞尔曲线的任意一个点,一定都在所给的控制点所形成的的凸包内。

一个例子:

几个点在一条线上 → 根据凸包的性质可知 → 凸包就是这条线(任意点都在凸包内)

5. Piecewise(逐段) 贝塞尔曲线

(1)为何引入逐段贝塞尔曲线

控制点多的时候 → 不好控制曲线 → 用少的控制点定义多条贝塞尔曲线,再连起来。

(2)两段曲线相连的连续性

C0:仅仅是两段曲线相连,也就是值相同

C1:相连处到相邻两个点的切线方向相反,长度相同

后面还有更高级的,就不多说了

曲面

1.贝塞尔曲面

四条贝塞尔曲线上面相同时间t可以得到四个点,这四个点又可以当作另外一条贝塞尔曲线的控制点,进行扫描之后就得到了贝塞尔曲面,总之就是竖着的四列连接出贝塞尔曲线后,再横着根据t依次连接成一条线

2.Mesh Operations: Geometry Processing

Mesh subdivision 网格细分

Mesh simplification 网格简化

Mesh regularization 网格正规化(基本都是规律的三角形)

3.Mesh subdivision 网格细分

网格细分的目的主要是进行三角形或者多边形细分,让物体表面变得更加光滑

1.Loop Subdivision

取每条边的中点相连分成四个三角形

调整新生成的顶点和原来的顶点的位置

对于新生成的顶点,肯定被两条边所共享,共享的这条边的两个顶点占的位置影响比重显然更大。

对于原来的顶点,定义两个变量,n就是顶点的度,也就是每个点连接的边的个数,,u就是和n相关的一个数,根据公式可以看出来1-n*u的结果貌似是唯二的,n=3的时候,等于7/16,不等于3的时候等于5/8,很明显相连的边越多,n越大,u越小,周围的点越不重要

细分结果:

2.Catmull-Clark Subdivision

定义:

quad face:四边形面

Non-quad face:非四边形面

Extraordinary vertex :奇异点(degree != 4,即度不为4的点- 度:连的边数)

细分操作:取每条边,每个面的中点 → 连起来 → 结果:每个非四边形都引入了一个奇异点,非四边形面消失

Catmull-Clark Subdivision的性质:在一次操作后,增加了非四边形面数的个数个奇异点,并且后边都不回再增加了。

如何更新新增加的点:

4.Mesh Simplification 网格简化

目的就是减少三角形的数量但也要尽量保持原来的形状

1.边坍缩—Edge Collapsing

但是应该坍缩哪条边,以及坍缩出来的点应该放在哪里呢,这里要用到二次误差度量,对于新捏出的简化后的一个顶点,也就是下图中的蓝色的顶点,我们找到影响它的各个面,把该顶点与各个面的距离的平方和求出来,平方和最小的这个位置也就是最优位置。

怎么确定坍缩哪条边呢?这里同样用到二次误差度量,在一个网格中,我们对每条边都做一次二次度量误差,也就是说对每条边坍缩后对网格的整体影响做一个预计算并排序,那么开始坍缩的时候,先从那条二次度量误差最小的那条边做坍缩。

但是我们每坍缩一条边之后,会对其它边的二次度量误差产生影响,也就是说,每坍缩一条边之后,我们的其它边坍缩后的对网格的影响要重新计算。也就是说我们需要一种数据结构,我们能瞬间取到最小值,也就是O(1),并且我们能动态的更新重新排序剩下的受影响的数据,也就是优先队列/堆。这也就支持了我们每次取二次度量误差最小的边进行坍缩,然后再取受影响之后的二次度量误差最小的边进行坍缩,然后循环往复的过程。
 

实际操作

补充:阴影

光栅化阶段的一个东西,Shadow mapping,

传统的Shadow Mapping只能处理点光源/方向光源,这种光源产生的阴影一般会有明显的边界,也就是硬阴影,也就是说一个点要么在阴影中,要么不在阴影中,非0即1的一个过程。其次,Shadow Mapping 会产生阴影的走样问题。

过程1:

1.如何判断一个点或者像素是否再阴影里?

在相机的角度可以看到这个点,但是在光源的角度看不到这个点。也就是说光源记录的这个点的深度和相机记录的这个点到光源的深度不一样

2.实际操作

第一步 :从光源看向场景进行一次光栅化,只记录深度

第二步:从光源看向场景,观察每个点投影回光源所在的成像上,对比摄像机观察到的点到光源的距离和光源记录的深度,深度一样,说明能看到,反之就是在阴影中

实例分析:

第一步光源出发得到深度图

第二步,对比深度后的结果图,看到的图很脏是因为浮点数的精度原因,其次第一步中得到的深度图的分辨率也会影响质量,所谓的阴影质量就是第一步深度图的分辨率大小

3.结果图

3.软阴影和硬阴影

软阴影的阴影有过渡的过程。点光源是不会产生软阴影的,软阴影的存在要求光源有一定的大小

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/189105.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学习JavaScript--JavaScript事件:响应与交互

JavaScript的事件处理是Web开发中至关重要的一部分,通过事件,能够实现用户与页面的互动,使得网页更加生动和交互性。本文将深入探讨JavaScript事件的各个方面,包括事件的基本概念、事件类型、事件对象、事件冒泡与捕获、事件委托、…

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。 IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器,支持4K HDMI2.0显示,接口丰富,拥有千兆以太网,全协议TypeC接口,USB3.0 ,eDP 和…

使用ETLCloud实现CDC实时数据集成:从MySQL到ClickHouse的实时数据同步

背景 在上一篇文章中体验了 ETLCloud 的离线数据迁移功能,就像大数据领域里有离线计算和实时计算, ETLCloud 还提供了基于 CDC (Change Data Capture)的实时数据集成功能:实时数据集成是指通过变化数据捕获技术&#…

数组的申明

数组是一组相同类型的数据 数组中的数据需要通过数字索引来访问。 数组的声明需要使用new关键字 在声明数组时,可以使用{}来初始化数组中的数组 如果在数组声明之初没有使用大括号来初始化数组的元素,则需要指定数组的大小 在声明初始化元素的数组时…

调试器gdb

目录 一、调试 1、前言 2、 debug和release 二、基本操作 1、退出 quit 2、开始调试 r 3、打断点 b 4、查看断点 info b 5、查看代码 l 6、删除断点 d 7、逐过程 n 8、打印变量内容 p 9、逐语句(进入函数) s 10、查看函数调用堆栈 bt 11、…

Nginx反向代理实现负载均衡webshell

目录 本实验所用的环境: 问题一:由于nginx采用的反向代理是轮询的方式,所以上传文件必须在两台后端服务器的相同位置上传相同的文件 问题二:我们在执行命令时,无法知道下次的请求交给哪台机器去执行我们在执行hostn…

堆和栈的区别 重点来说一下堆和栈;堆与栈之间的联系

文章目录 堆和栈的区别重点来说一下堆和栈:那么堆和栈是怎么联系起来的呢? 堆与栈的区别 很明显: 今天来聊一聊java中的堆和栈,工作当中这两个也是经常遇到的,知识我们没有去注意理论上的这些内容,今天就来分享一下。…

Ps:拾色器 - 选取专色

在 Adobe 拾色器中,可点击“颜色库” Color Libraries按钮来选取专色。 首先在色库 Book列表中选择对应的色库,然后在中间的色相条中选择需要的样本组,再从左侧颜色列表中选取颜色。 可以直接键入颜色名称来选择。比如,键入 13&am…

【ArcGIS Pro微课1000例】0038:基于ArcGIS Pro的人口密度分析与制图

文章目录 一、人口密度二、人口密度分析1. 点密度分析2. 核密度分析三、结果比对一、人口密度 人口密度是指单位土地面积上居住的人口数,通常以每平方千米或每公顷内的常住人口为单位计算。人口密度同资源、经济密切结合,因此,科学准确地分析人口密度的分布情况,对合理制定…

【数据结构】树与二叉树(廿三):树和森林的遍历——层次遍历(LevelOrder)

文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法5.3.3 树和森林的遍历1. 先根遍历(递归、非递归)2. 后根遍历(递归、非递归)3. 森林的遍历4. 层次遍历a. 算法LevelOrderb. 算法解读c. 时间复杂度d.代码…

MATLAB在信号系统中的应用

1.产生一个幅度为1, 基频为2Hz,占空比为50%的周期方波.要求画出图形。 在MATLAB中,函数square(w0*t, DUTY)产生基本频率为w0 (周期T2*pi/w0)、占空比DUTY (τ/T)*100的周期矩形波(方波),默认情况下占空比DUTY50。占空…

Nivision 图像处理方法-Brightness(BCGTransform)实现验证测试

测试发现NIvision中实际使用的公式是: int brightness199; float contrast61.38; float gamma0.52; uchar lut[256]; float k tan(contrast*CV_PI / 180); for (int i 0; i < 256; i) { lut[i] saturate_cast<uchar>(k*(pow(i, gamma)/ pow(255, gamma) * 2…

操作系统——操作系统概论s

一、操作系统基本概念 1 操作系统定义 操作系统是裸机上的第一层软件&#xff0c;它是对硬件系统功能的首次扩充&#xff0c; 用以填补人与机器之间的鸿沟。 OS定义&#xff1a;操作系统是控制和管理计算机系统内各种硬件和软件资源&#xff0c;有效地组织多道程序运行的系统软…

小程序中的大道理之四--单元测试

在讨论领域模型之前, 先继续说下关于测试方面的内容, 前面为了集中讨论相应主题而对此作了推迟, 下面先补上关于测试方面的. 测试覆盖(Coverage) 先回到之前的一些步骤上, 假设我们现在写好了 getPattern 方法, 而 getLineContent 还处于 TODO 状态, 如下: public String ge…

Python 前后端分离项目Vue部署应用

一、视图创建 from django.http import JsonResponse from django.shortcuts import render# Create your views here. from django.views import Viewclass IndexView(View):def get(self,request):# 前后端分离 &#xff08;前端JS代码渲染数据&#xff09;return JsonRespo…

html实现360度产品预览(附源码)

文章目录 1.设计来源1.1 拖动汽车产品旋转1.2 汽车产品自动控制 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134613931 html实现360度产品预览&#xff08;附源码&…

【代码】平抑风电波动的电-氢混合储能容量优化配置(完美复现)matlab-yalmip-cplex/gurobi

程序名称&#xff1a;平抑风电波动的电-氢混合储能容量优化配置 实现平台&#xff1a;matlab-yalmip-cplex/gurobi 代码简介&#xff1a;针对电-氢混合系统协同平抑接入新型电力系统的 新能源波动问题&#xff0c;提出考虑碱性电解槽运行特性的电-氢 混合储能容量优化配置方案…

MSI Center,XBox从任务栏取消固定

1&#xff0c;设置查看方式中隐藏项目可见 2&#xff0c;进入文件夹&#xff1a;C:\Users\Default\AppData\Local\Microsoft\Windows\Shell 找到下面这两个文件夹&#xff1a; 3&#xff0c;修改文件名或者删除这两个文件即可

MySQL 批量插入记录报 Error 1390 (HY000)

文章目录 1.背景2.问题3.分批插入4.一次最多能插入多少条记录&#xff1f;5.什么是 Prepared Statement&#xff1f;参考文献 1.背景 Golang 后台服务使用 GORM 实现与 MySQL 的交互&#xff0c;在实现一个通过 Excel 导入数据的接口时&#xff0c;使用 Save 方法一次性插入大…

Mybatis-Plus 租户使用

Mybatis-Plus 租户使用 文章目录 Mybatis-Plus 租户使用一. 前言1.1 租户存在的意义1.2 租户框架 二. Mybatis-plus 租户2.1 租户处理器2.2 前置准备1. 依赖2. 表及数据准备3. 代码生成器 2.3 使用 三. 深入使用3.1 前言3.2 租户主体设值&#xff0c;取值3.3 部分表全量db操作3…