图形学笔记 - 4. 几何 - 基本表示方法及曲线和曲面

几何例子


曲面

复杂
在这里插入图片描述
布料
![[Pasted image 20241118002650.png]]
水滴、流体,模拟。
![[Pasted image 20241118002717.png]]
东西多,几何存储
在这里插入图片描述
毛发,复杂几何
在这里插入图片描述
近距离
在这里插入图片描述
二维
在这里插入图片描述

表示几何的许多方法

Implicit 隐式

  • 代数曲面
  • 水平集
  • 距离函数

Explicit 显式

  • 点云
  • 多边形网格
  • 细分subdivision,NURBS
    在这里插入图片描述
    每种选择最适合不同的任务/几何类型

几何的“隐式”表示

基于分类点

  • 点满足某种特定的关系
    例如球体:在3D中x2+y2+z2=1x^2+y^2+z^2 = 1x2+y2+z2=1的所有点
    更一般地说,f(x,y,z)=0f(x,y,z) = 0f(x,y,z)=0
    在这里插入图片描述

采样很难
f(x,y,z)=(2−x2+y2)2+z2−1f(x,y,z)=(2-\sqrt{x^2+y^2})^2+z^2-1f(x,y,z)=(2x2+y2)2+z21
f(x,y,z)=0f(x,y,z) = 0f(x,y,z)=0上有哪些点?
![[Pasted image 20241118004024.png]]
有些任务很难使用隐式表示

内部/外部测试简单
f(x,y,z)=x2+y2+z2−1f(x,y,z)=x^2+y^2+z^2-1f(x,y,z)=x2+y2+z21
(3/4,1/2,1/4)(3/ 4,1 /2, 1/4)(3/4,1/2,1/4)在里面吗
直接带入:f(x,y,z)=–1/8<0f(x,y,z) = –1/8 < 0f(x,y,z)=–1/8<0。在里面
在这里插入图片描述
隐式表示使一些任务变得容易

几何的“显式”表示

所有的点都是直接或通过参数映射给出的
在这里插入图片描述

采样很容易
f(u,v)=((2+cos⁡u)cos⁡v,(2+cos⁡u)sin⁡v,sin⁡u)f(u,v) = ((2 +\cos u)\cos v,(2+\cos u)\sin v,\sin u)f(u,v)=((2+cosu)cosv,(2+cosu)sinv,sinu)
这个表面上有什么点,直接带入(u,v)
显式表示使一些任务变得容易
在这里插入图片描述

内外判断困难
f(u,v)=(cos⁡usin⁡v,sin⁡usin⁡v,cos⁡v)f(u,v) = (\cos u \sin v,\sin u \sin v,\cos v)f(u,v)=(cosusinv,sinusinv,cosv)
不容易判断内外

没有“最好”的表示-几何很难!

“I hate meshes. I cannot believe how hard this is. Geometry is hard.” — David Baraff Senior Research Scientist Pixar Animation Studios

最好的表示取决于任务!

计算机图形学中更多的隐式表征

代数曲面
体素构造表示
水平集方法
分形
在这里插入图片描述

代数曲面

曲面是x, y, z的多项式的零点集
在这里插入图片描述

体素构造表示Constructive Solid Geometry

通过布尔运算组合隐式几何
在这里插入图片描述

距离函数

不是布尔值,逐渐混合曲面在一起使用

距离函数:给出从任何地方到对象的最小距离(可以是signed Distance)
![[Pasted image 20241118025305.png]]
一个例子:混合(线性插值)一个移动的边界
在这里插入图片描述
混合距离函数
可以混合任意两个距离函数d1, d2:
在这里插入图片描述
纯距离函数场景
在这里插入图片描述
See https://iquilezles.org/www/articles/raymarchingdf/raymarchingdf.htm

水平集

封闭形式的方程很难描述复杂的形状
备选方案:存储一个网格值逼近函数
在这里插入图片描述
找到插值值为零的曲面
对形状(如纹理)提供更显式的控制

来自医疗数据(CT、MRI等)的水平集。水平集编码,例如,恒定的组织密度
在这里插入图片描述
物理模拟
水平集编码到气液边界的距离
在这里插入图片描述

分形

展示自相似性,所有尺度的细节
描述自然现象的“语言”
难以控制形状

隐式表示的优缺点

优点:

  • 紧凑的描述(例如,一个函数)
  • 某些查询很容易(对象内部,到表面的距离)
  • 适用于光线与表面的相交(稍后会详细介绍)
  • 对于简单的形状,精确的描述/无采样误差
  • 易于处理拓扑变化(例如,流体)
    缺点:
  • 难以模拟复杂的形状

显示表示

在这里插入图片描述

点云

最简单的表示:点列表(x, y,z)
很容易表示任何几何图形
适用于大型数据集(>>1 点 / 像素)
经常转换成多边形网格
在采样不足的地区很难绘制
在这里插入图片描述

多边形网格

存储顶点和多边形(通常是三角形或四边形)
更容易进行处理 / 模拟
自适应采样更复杂的数据结构
也许是图形中最常见的表示
在这里插入图片描述
The Wavefront Object File (.obj) Format
常用于图形研究
只是一个指定顶点、法线、纹理坐标及其连通性的文本文件
在这里插入图片描述
v 几何体顶点 (Geometric vertices)
vt 贴图坐标点 (Texture vertices)
vn 顶点法线 (Vertex normals)
vp 参数空格顶点 (Parameter space vertices)
f 面 (Face) : 每三个点组成一个三角形

曲线(Curves)

相机路径
在这里插入图片描述
动画曲线
在这里插入图片描述
矢量字体
![[Pasted image 20241120151456.png]]
巴斯克维尔字体 - 表示为分段三次贝塞尔曲线

贝塞尔曲线(Bézier Curves)

用切线定义三次 Bézier 曲线
![[Pasted image 20241120151606.png]]

Evaluating Bézier Curves (de Casteljau Algorithm)

考虑三个点(二次贝塞尔)

使用线性插值插入一个点
在这里插入图片描述
两边都插入
在这里插入图片描述
递归重复
在这里插入图片描述
[0,1][0,1][0,1] 中的每个 t 运行相同的算法
在这里插入图片描述

三次贝塞尔曲线
总共四个输入点
相同的递归线性插值
在这里插入图片描述
可视化de Casteljau Algorithm
在这里插入图片描述

Bézier 曲线代数公式

de Casteljau 算法给出了系数金字塔
在这里插入图片描述
(画反了)
例:来自三点的二次贝塞尔曲线
在这里插入图片描述
b01(t)=(1−t)b0+tb1 \mathbf{b}_0^1(t) = (1-t)\mathbf{b}_0+t\mathbf{b}_1 b01(t)=(1t)b0+tb1
b11(t)=(1−t)b1+tb2 \mathbf{b}_1^1(t) = (1-t)\mathbf{b}_1+t\mathbf{b}_2 b11(t)=(1t)b1+tb2
b02(t)=(1−t)b01+tb11 \mathbf{b}_0^2(t) = (1-t)\mathbf{b}_0^1+t\mathbf{b}_1^1 b02(t)=(1t)b01+tb11
于是
b02(t)=(1−t)2b0+2t(1−t)b1+t2b2 \mathbf{b}_0^2(t) = (1-t)^2\mathbf{b}_0+2t(1-t)\mathbf{b}_1+t^2\mathbf{b}_2 b02(t)=(1t)2b0+2t(1t)b1+t2b2

一般代数公式
n 阶 Bézier 曲线的 Bernstein 形式
在这里插入图片描述
Bernstein 多项式:
Bin(t)=(ni)ti(1−t)n−i B_i^n(t)=\binom{n}{i}t^i(1-t)^{n-i} Bin(t)=(in)ti(1t)ni
例:假设n=3,在R^3
我们可以有 3D 控制点,例如
b0=(0,2,3),b1=(2,3,5),b2=(6,7,9),b3=(3,4,5)\mathbf{b}_0 =(0,2,3), \mathbf{b}_1 =(2,3,5), \mathbf{b}_2 =(6,7,9), \mathbf{b}_3 =(3,4,5)b0=(0,2,3),b1=(2,3,5),b2=(6,7,9),b3=(3,4,5)
这些点定义了一个t的三次贝塞尔曲线
bn(t)=b0(1−t)3+b13t(1−t)2+b23t2(1−t)+b3t3 \mathbf{b}^n(t)= \mathbf{b}_0(1 -t)^3 +\mathbf{b}_1 3t(1-t)2 +\mathbf{b}_23t^2(1-t)+\mathbf{b}_3t^3 bn(t)=b0(1t)3+b13t(1t)2+b23t2(1t)+b3t3
三次贝塞尔基函数
Bernstein 多项式:
Bin(t)=(ni)ti(1−t)n−i B_i^n(t)=\binom{n}{i}t^i(1-t)^{n-i} Bin(t)=(in)ti(1t)ni
在这里插入图片描述

贝塞尔曲线的性质

插值端点

  • 对于三次贝塞尔: b(0)=b0; b(1)=b3b(0)=b_0;\ b(1)=b_3b(0)=b0; b(1)=b3
    切线到端段

  • 三次形式:b′(0)=3(b1−b0); b′(1)=3(b3−b2)b'(0)=3(b_1-b_0);\ b'(1)=3(b_3-b_2)b(0)=3(b1b0); b(1)=3(b3b2)
    仿射变换性质

  • 通过变换控制点变换曲线。参考系无关
    凸包性质

  • 曲线在控制点的凸包内
    在这里插入图片描述

      							凸包
    
分段贝塞尔曲线

高阶贝塞尔曲线很难控制
在这里插入图片描述

分段贝塞尔曲线
相反,链接许多低阶贝塞尔曲线
分段三次贝塞尔最常见的技术
广泛使用(字体、路径、Illustrator、Keynote…)
在这里插入图片描述

David Eck, http://math.hws.edu/eck/cs424/notes2013/canvas/bezier.html

连续性

两条贝塞尔曲线
a:[k,k+1]→RN\mathbf{a}:[k,k+1]\rightarrow \mathbb{R}^Na:[k,k+1]RN
b:[k+1,k+2]→RN\mathbf{b}:[k+1,k+2]\rightarrow \mathbb{R}^Nb:[k+1,k+2]RN
假设这里有整数分区,可以一般化
在这里插入图片描述

C0C^0C0 连续性:an=b0\mathbf{a}_n=\mathbf{b}_0an=b0
C1C^1C1 连续性:an=b0=12(an−1+b1)\mathbf{a}_n=\mathbf{b}_0=\frac{1}{2}(\mathbf{a}_{n-1}+\mathbf{b}_1)an=b0=21(an1+b1)
在这里插入图片描述

其他类型的样条

样条

  • 为通过给定集合而构造的连续曲线的点并有一定数量的连续导数。
  • 简而言之,控制下的曲线
    B 样条
  • basis splines的缩写
  • 需要比贝塞尔曲线更多的信息
  • 满足贝塞尔曲线具有的所有重要性质(即:超集
    局部性
    MORE:
    NURBS
    Prof. Shi-Min Hu’s course:
    https://www.bilibili.com/video/av66548502?from=search&seid=65256805876131485

表面

Bézier Surfaces 贝塞尔表面

将贝塞尔曲线扩展到曲面
在这里插入图片描述

Bicubic(双三次型) Bézier 表面贴片
在这里插入图片描述
可视化 Bicubic Bézier 表面贴片
在这里插入图片描述
Animation: Steven Wittens, Making Things with Maths, http://acko.net
计算

参数(u, v)的表面位置
对于双三次贝塞尔表面贴片,
输入:4x4 控制点
输出是由[0,1]2[0,1]^2[0,1]2 中的(u, v)参数化的 2D 曲面

方法:可分离的一维 de Casteljau 算法

目标:评估对应于(u, v)的表面位置
de Casteljau 算法的(u,v)-可分离应用

  • 使用 de Casteljau 计算 u 中4条贝塞尔曲线中每条曲线上的点 u。这为 “移动” 贝塞尔曲线提供了 4 个控制点
  • 使用 1D de Casteljau计算“移动”曲线上的点 v
    在这里插入图片描述
    在这里插入图片描述
网格操作:几何处理
  • 网格细分
  • 网格简化
  • 网格正则化
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知不道abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值