GAMES101-现代计算机图形学入门-闫令琪 - lecture11 几何3(Geometry 3) - 课后笔记

几何2 - 曲线和曲面(Geometry 2 - Curves and Surface)

上一节提到,要表现一些复杂的几何模型有两种方法:

  • 隐式几何
  • 显式几何

本节课讲的为显式几何

显式几何(Explicit Representations)

显式几何有两种方式:

  • 一种是像三角形直接定义出来
  • 另一种是通过参数映射的方法定义表面

显式几何有许多的方法,如:
在这里插入图片描述

下面介绍几种方法:

点云(Point Cloud)

点云是最简单的一种方法,点云是将每一个点就当作一个点,并不像三角形那样把点链接起来,而是只是单纯的用点来形成面。当点十分密集时,每个点和点之间都是相邻并且十分接近,密集的点就能形成一个面。如下所示:
在这里插入图片描述

上面部分的点十分密集,形成了一个铜像,而下面的点比较稀疏,则无法构成一个面,只能看见一些离散的点。

这种方法有以下特点:

  • 能够十分简单的表示任何几何形体
  • 对于大量数据的点集合很有用
  • 通常被转换为多边形的面
  • 在采样不足的区域很难绘制出图形,如上图下面

多边形面(Polygon Mesh)

多边形面是目前应用最广泛的一种方式。具有以下特点:

  • 存储顶点和面的信息,面通常是三角形或者矩形
  • 更容易处理和采样
  • 这种方法使用的数据结构更加复杂

下图的几何体就是用多边形面所组成的。
在这里插入图片描述

存储几何体的文件 .obj文件

一般用.obj文件来存储一个模型,如果使用blender建模然后导出就可以得到一个.obj文件,文件的内容如下:

在这里插入图片描述

v代表几何体的每个顶点的位置信息,vt代表纹理坐标,vn代表顶点对应的法向量,f代表将三角形连接成顶点的索引顺序。

如第一行f表示,将第5个,第1个和第4个顶点连接成三角形。f代表的是:顶点号/纹理号/法向量号。

曲线(Curves)

贝塞尔曲线(Bézier Curves)

贝塞尔曲线定义一个曲线的方法,如下图:
在这里插入图片描述

p0,p1,p2,p3为控制点,其中p0,p3为起点和终点。定义一个曲线的条件:

  • 知道起点p0和终点p3
  • 起点和终点的切线方向分别在p0p1和p2p3上

有以上两个条件,就可以定义一个控制方向。即控制点+属性就可以定义一条曲线。

注:曲线并不一定经过控制点,但一定经过起点和终点。

画一条贝塞尔曲线

先考虑只有三个顶点两条线段的情况下如何画一条曲线:
在这里插入图片描述

b0,b2为起点和终点,b0,b1,b2为控制点。

贝塞尔画曲线的方法就是:假设有一个时间t属于[0,1],只要找出所有 在任意时间t上所对应的曲线的点,就可以画出这条曲线。

也就是说,给一个时间t属于[0,1],找出曲线上这个点在哪。如下图所示:
在这里插入图片描述
注:上图bo到中间点b(01)为(1-t),而b(01)到b1为t,图画反了。

要在两条线段上都找到这样一个中点:
在这里插入图片描述
然后在两个中点的连线上再找到一个时间t对应的中点。
在这里插入图片描述
得到的b(02)就是曲线上的点。只要我们枚举所有的时间t所对应的点,就能够画出这条曲线。
在这里插入图片描述
如果有四个点三条线段时:
在这里插入图片描述
如上所示,现在三条线段上各找一个中点,然后将三个中点连接成两条线段,然后再在两条线段上找两个中点,然后再连接成一个线段,再找到这一个线段上的中点即可。简化一下:

四个点,三条线 - > 三个点,两条线 - > 两个点,一条线 -> 一个点,这个点就是曲线上的点。

贝塞尔曲线用代数表示

在这里插入图片描述
先把b(01)和b(11)用控制点表示出来,然后再对b(02)用上面获得的两个中点表示。将b(01)和b(11)带入b(02),就能够得到最下面的那个式子。可以看到,b(02)是所有控制点的一个线性组合所表示的,是否可以认为,曲线上的点都是所有控制点的一个线性组合?

实际上是这样,所有曲线上的点都是所有控制点的一个线性组合,公式如下:
在这里插入图片描述
上图表示当有n+1个控制点时,曲线上t所对应的点可以由所有的控制点的线性组合表示,其中:
在这里插入图片描述
可以看出,其实
在这里插入图片描述

为[t + (1-t)]^n的二项展开的一个通项。

一个例子:
在这里插入图片描述

贝塞尔曲线的属性

  • 第一个和最后一个控制点为起始点,一定要经过,其他控制点不一定经过
    在这里插入图片描述- 最开始的两个点和最后的两个点决定起点和终点的切线方向,比如有4个点b0,b1,b2,b3,切线如下
    在这里插入图片描述
    其中3并不是固定的,当控制点的数量改变时,3可能变为其他的系数

  • 先用控制点画的贝塞尔曲线,和经过仿射变换(affine transformation)的控制点画出来的曲线是一样的。注:旋转变换+缩放变换 = 线性变换, 线性变换 + 平移变换 = 仿射变换。

  • 凸包性质(Convex hull property):给出一系列的控制点画曲线,画出来的曲线一定在一个能够包围所有控制点的范围内。如下图所示:
    在这里插入图片描述
    其中蓝色的框就是凸包,这些控制点画出来的曲线一定在这个蓝色框内。更通俗的理解就是说:比如在一个木板上,钉了许多钉子,这些黑点就是一个一个钉子,然后用一个环形的橡皮筋来包围住这些所有的钉子,这个橡皮筋一定会被最外围的一圈钉子支撑形成一个环,这个环就是凸包。

分段贝塞尔曲线(Piecewise Bézier Curves)

先看下面一个例子:
在这里插入图片描述
上图中,用十个控制点来画贝塞尔曲线,可以看到划出了一条曲线。但是这存在了一些问题,在一些偏移较大的控制点的位置,其画出来的曲线偏移十分的小,比如在靠近上面的一段曲线甚至接近一条直线,但是可以看到控制点歪曲的方向非常大,这就是为题所在。

当控制点十分多的时候再用贝塞尔曲线,得到的曲线就难以达到我们想要的标准,于是我们想:为什么要用许多的控制点定义一个贝塞尔曲线,而不是用几个控制点定义一段贝塞尔曲线,最终把这些曲线连接起来?于是,分段贝塞尔曲线就诞生了。

分段贝塞尔曲线通常用四个控制点定义一段曲线,然后将这些曲线最终连起来。如下:
在这里插入图片描述
以最左面的一段曲线举例,四个控制点定义了这一段曲线:
在这里插入图片描述
图中四个蓝色的点为控制点,然后后面的依次类推,每次用四个控制点画一段贝塞尔曲线,最后连起来就能够得到一条我们希望的曲线。

分段贝塞尔曲线的连续性

分段贝塞尔的连续性有两种,分别是:

  • C0连续,即上一段曲线的终点是下一段曲线的起点,仅仅满足这种物理上的连续,并不要求在连续点的切线方向不变(或者说可导),能够满足下面这种情况都可以。an为上一段曲线的终点,b0为下一段曲线的起点。
    在这里插入图片描述
  • C1连续,除了满足C0连续的条件外,还要满足在连接点的两端切线的方向相同,切长度相等。如下面红线所示,中间点为终点,左右两个点分别为两段曲线的控制点。
    在这里插入图片描述
    ​ C1连续要满足的代数条件:
    在这里插入图片描述

样条曲线(Spline)

定义:一个连续的曲线由一系列的控制点控制,并且在曲线上的任意一点都满足连续性。

解决问题:在之前10个控制点的例子中,对于这种控制点很多的曲线,当我们想修改其中的一小部分的时候,如果用贝塞尔曲线,当我们想修改一个控制点,就会导致整个曲线发生改变,这个是我们不希望看到的。我们希望改变一个控制点只会改变局部的曲线,希望曲线能够具有这种局部性。样条就是解决这个问题。分段贝塞尔也可以解决这个问题,但是样条能够控制更加方便,不需要分段。

曲面(surfaces)

贝塞尔曲面(Bézier Surfaces)

贝塞尔的曲面构建如下图所示:
在这里插入图片描述

  • 有一个时间t属于[0,1],根据控制点和时间t画出纵向的曲线。
  • 有一个时间v属于[0,1],在对应的时间v上找出四条曲线上对应的四个点,将这四个点作为控制点就可以画出横向的曲线。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMES101-现代计算机图形学入门-闫令琪 - lecture4 观测变换(viewing transformation) - 课后笔记

观测变换(Viewing transformation) 视图 / 相机变换(View / Camera transformation)投影变换(Projection transformation) 正交投影(Orthographic projection)透视投影(…

GAMES101-现代计算机图形学入门-闫令琪 - lecture9 着色3(Shading 3) - 课后笔记

着色3(Shading 3) 重心坐标纹理查询纹理应用 插值 - 重心坐标 (Barycentric Coordinates) 为什么要插值? 能够获得三角形三个固定顶点的属性,但是不知道三角形内部的属性希望三角形内部属性能有一个平滑…

GAMES101-现代计算机图形学入门-闫令琪 - lecture6 光栅化2(抗锯齿) - 课后笔记

光栅化2(抗锯齿)(Rasterization 2 - Antialiasing) 抗锯齿的内容包括: 采样理论(Sampling theory)抗锯齿的实践应用(Antialiasing in practice) 接着上节 我们采样是…

GAMES101-现代计算机图形学入门-闫令琪 - lecture5 光栅化(三角形的离散化) - 课后笔记

光栅化(三角形的离散化)(Rasterization1 (Triangles)) 接着上面的透视投影开始: 如何确定一个近平面的 l(left) , r(right) , b(bottom) , t(top)四个面?通常使用竖直可视角度(vertical field…

GAMES101-现代计算机图形学入门-闫令琪 - lecture3 变换(transformation) - 课后笔记

变换 为什么要变换? 变换有两种,一种 model 和 view 变换,其中model变换中包括缩放, 而view则主要是讲3D投影到2D的画面上 二维变换 要找到一个变换,实际上就是寻找变换后得坐标(x‘,y’)和变换之前的坐标&#xf…

GAMES101-现代计算机图形学入门-闫令琪 - lecture7 着色(Shading) - 课后笔记

着色(Shading) 可视性 / 遮挡 Z - 缓冲 (Z - buffering,深度缓冲) 着色 光照 和 着色 (illunmination & Shading) 画家算法(Painter s Algorithm) 先注明一下&am…

全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)

从0到1快速入门场景问题智能生成应用场景 Introduce 简介setting 设置Prompt 提示Sample response 回复样本API request 接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例 其它资料下载 ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和…

记一次alertmanager发送邮件失败的处理过程

文章目录 0 说明环境说明阅读说明 1 先验证smtp信息是否正确2 配置alertmanager配置文件并触发告警3 解决 smtp.plainAuth failed: wrong host name4 解决 dial tcp 127.0.0.1:5001: connect: connection refused5 解决 配置文件不对应的问题6 解决configmap跟挂载文件名不对应…

使用telnet客户端发送假冒邮件出现由某某代发怎么解决

使用telnet客户端发送假冒邮件出现由某某代发怎么解决 步骤如下,打码的是邮箱地址 想知道为什么我的有"由某某代发",而别人的没有,都是通过同样的操作在自己的电脑上操作的

奇葩经历之一_Hotmail邮箱无法查看和发送任何邮件

起因——“似乎有其他人使用你的帐户!” 因为IP活动异常,微软通知你账号有风险: 自动处理——“别慌,我们停用你的账户,这样就安全了!” 没有任何通知和提示就直接关闭邮箱功能,从这以后&…

记录项目里面用到的几个给国外邮箱发邮件的代码

一些说明: 这几个都可以正常发邮件,但是免费的每天都会有限制,发多了就会黑名单。。。 最终选择了exchange付费的版本,每天可以发1万条邮件,也不是很贵,基础的32一个月的就可以了 import javax.mail.inte…

JavaMail邮件发送不成功的那些坑人情况及分析说明(巨坑跳出专用姿势)

https://blog.csdn.net/xyw591238/article/details/69530950 前言 JavaMail的使用本身并不难,网上有不少案例,简单易懂,而且有详细的中文注解。但是由于JavaMail的机制设置不够完善,特别是异常出错时的参考信息太少,给…

Python通过发邮件通知自己电脑被入侵

我对IT技术有着狂热的追求,虽然现在很渣,但是我有颗钻研的心,例外我还比较喜欢看小说,相信看过最强黑客的人对里面的黑客的技术佩服得无以复加,黑客一般对自己的电脑数据都比较在意,一般都会设置些密码等并…

如何在线伪造邮箱发件人,用任意邮箱发送邮件

今天邮箱收到一封自己域名发过来的邮件,但是询问当事人说并没有发送相关邮件,于是去百度了下,看是否可以伪造发件人,于是找到一个网站 http://tool.chacuo.net/mailanonymous,这个网站可以用任意的邮箱地址发邮件&…

单播通信、主播通信和广播通信

单播 简介 单播(unicast)是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。每次只有两个实体相互通信,发送端和接收端都是唯一确定的。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用…

Qt 之图形(转换)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。 QTransform 与 QMatrix 不…

全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rotate(45);QLabel *Label new QLabel(); Label-…

网页特效——女儿国国王

目录 💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝&…

不使用插件,小程序也能完整的渲染富文本(视频展现,图片自适应)

用过小程序rict-text的帅哥靓女们(说的就是正在看文章的你)都知道,rich-text是无法解析富文本中的video标签的,本文教你如何优雅的在不使用插件的情况下完整的渲染富文本 首先是富文本图片自适应的问题 当我们从后端拿到富文本数…

让AI替你打工?CHATGPT提升开发效率

1 需求分析 提取需求关键点 ChatGPT 通过对需求文档的分析,自动提取关键需求和功能点,方便开发团队更好地理解项目需求。 2 技术方案 大表更新方案 在某支付业务中,有一个大表4000万行数据,使用的 mysqlA5.6 的版本&#xff…