当前位置: 首页 > article >正文

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

几何例子


曲面

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

表示几何的许多方法

Implicit 隐式

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

Explicit 显式

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

几何的“隐式”表示

基于分类点

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

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

内部/外部测试简单
f ( x , y , z ) = x 2 + y 2 + z 2 − 1 f(x,y,z)=x^2+y^2+z^2-1 f(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 < 0 f(x,y,z) = –1/8 < 0 f(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 ⁡ u sin ⁡ v , sin ⁡ u sin ⁡ 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 算法给出了系数金字塔
在这里插入图片描述
(画反了)
例:来自三点的二次贝塞尔曲线
在这里插入图片描述
b 0 1 ( t ) = ( 1 − t ) b 0 + t b 1 \mathbf{b}_0^1(t) = (1-t)\mathbf{b}_0+t\mathbf{b}_1 b01(t)=(1t)b0+tb1
b 1 1 ( t ) = ( 1 − t ) b 1 + t b 2 \mathbf{b}_1^1(t) = (1-t)\mathbf{b}_1+t\mathbf{b}_2 b11(t)=(1t)b1+tb2
b 0 2 ( t ) = ( 1 − t ) b 0 1 + t b 1 1 \mathbf{b}_0^2(t) = (1-t)\mathbf{b}_0^1+t\mathbf{b}_1^1 b02(t)=(1t)b01+tb11
于是
b 0 2 ( t ) = ( 1 − t ) 2 b 0 + 2 t ( 1 − t ) b 1 + t 2 b 2 \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 多项式:
B i n ( t ) = ( n i ) t i ( 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 控制点,例如
b 0 = ( 0 , 2 , 3 ) , b 1 = ( 2 , 3 , 5 ) , b 2 = ( 6 , 7 , 9 ) , b 3 = ( 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的三次贝塞尔曲线
b n ( t ) = b 0 ( 1 − t ) 3 + b 1 3 t ( 1 − t ) 2 + b 2 3 t 2 ( 1 − t ) + b 3 t 3 \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 多项式:
B i n ( t ) = ( n i ) t i ( 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 ) = b 0 ;   b ( 1 ) = b 3 b(0)=b_0;\ b(1)=b_3 b(0)=b0; b(1)=b3
    切线到端段

  • 三次形式: b ′ ( 0 ) = 3 ( b 1 − b 0 ) ;   b ′ ( 1 ) = 3 ( b 3 − b 2 ) 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 ] → R N \mathbf{a}:[k,k+1]\rightarrow \mathbb{R}^N a:[k,k+1]RN
b : [ k + 1 , k + 2 ] → R N \mathbf{b}:[k+1,k+2]\rightarrow \mathbb{R}^N b:[k+1,k+2]RN
假设这里有整数分区,可以一般化
在这里插入图片描述

C 0 C^0 C0 连续性: a n = b 0 \mathbf{a}_n=\mathbf{b}_0 an=b0
C 1 C^1 C1 连续性: a n = b 0 = 1 2 ( a n − 1 + b 1 ) \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
    在这里插入图片描述
    在这里插入图片描述
网格操作:几何处理
  • 网格细分
  • 网格简化
  • 网格正则化
    在这里插入图片描述

http://www.kler.cn/a/402979.html

相关文章:

  • 【Isaac Sim】配置 Nucleus 本地服务器
  • C#语言入门
  • 学习笔记|MaxKB对接本地大模型时,选择Ollma还是vLLM?
  • 调大Vscode资源管理器字体
  • 数据结构之树与二叉树
  • 华三(H3C)T1020 IPS服务器硬件监控指标解读
  • 大数据入门-什么是Flink
  • 南京邮电大学算法设计-二叉树先序遍历算法动态演示
  • Springboot项目搭建(2)-用户详细信息查询
  • k8s搭建1.23版本
  • 从零开始深度学习:全连接层、损失函数与梯度下降的详尽指南
  • 【西瓜书】对数几率回归(逻辑回归)的概念与表示
  • 生成式语言模型 三范式 预训练、微调、强化反馈学习
  • 深度神经网络中不同的卷积层提取的特征有什么不同?
  • 企业项目级IDEA编辑器设置类注释、方法注释模板(仅增加@author和@date)
  • 【Linux系统编程】第四十七弹---深入探索:POSIX信号量与基于环形队列的生产消费模型实现
  • React中常用的钩子
  • 深度学习神经网络中的优化器的使用
  • Fundamental Analysis and Mean-Variance Optimal Portfolios论文阅读
  • python3 Flask应用 使用 Flask-SQLAlchemy操作MySQL数据库
  • 鸿蒙开发:ForEach中为什么键值生成函数很重要
  • # 07_ Python基础到实战一飞冲天(二)-python基础(七)--变量类型计算与输入输出
  • 鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构
  • Hadoop 架构
  • 使用 SMB 协议从win10电脑访问同网段ubuntu电脑文件
  • Node.js 笔记(一):express路由