视频加载失败

Geometry 几何1

1023 字
5 分钟
Geometry 几何1
Geometry 几何1

几何分类#

根据需要选择对几何的表示方法

Implicit geometry 隐式几何#

  • 点满足特定方程关系

例子:球上的点,即x2+y2+z2=1x^2+y^2+z^2 = 1是球的隐式表示 推广开来,即是点(x,y,z)(x,y,z)满足关系f(x,y,z)=0f(x,y,z) = 0

  • 优点:容易判断点和几何体表面的关系
  • 缺点:难以描述构成这个几何体表面的点

数学公式表示#

  • 简单
  • 难以表示复杂形状

CSG 构造几何体几何#

  • 通过几何体间的布尔操作表示

Signed Distance Functions 有符号距离函数#

  • 描述点到表面的距离

Level Set Methods 水平集#

  • 类似于距离函数

分形#

  • 自相似,自己的一个部分和自己长得很像

Explicit geometry 显式几何#

  • 点满足参数映射关系或直接给出点

例子:f(u,v)=(cos⁡usin⁡v,sin⁡usin⁡v,cos⁡v)f(u,v) = (\cos{u}\sin{v},\sin{u}\sin{v},\cos{v})

  • 优点:容易描述构成这个几何体表面的点
  • 缺点:难以判断点和几何体表面的关系

Point Cloud 点云#

  • 将几何体用一系列点表示
  • 可以表示任何不同类型的几何

Polygon Mesh 多边形面#

  • 将面拆成三角形或者四边形

曲线#

贝塞尔曲线#

  • 用一系列控制点来定义曲线
  • 曲线一定要经过起始点和终止点,且这两个点是曲线的切点

流程#

公式#

bn(t)\textbf{b}^n(t)表示tt时刻点的位置,bj\textbf{b}_j表示贝塞尔曲线的控制点

bn(t)=b0n(t)=∑jnbjBjn(t) \textbf{b}^n(t) = \textbf{b}_0^n(t) = \sum_j^n\textbf{b}_jB_j^n(t)

其中:

Bjn(t)=(ni)ti(1−t)n−i B_j^n(t) = \binom{n}{i}t^i(1-t)^{n-i}

类似于二项式系数
tt在[0,1][0,1]对应的所有点即构成了这些控制点对应的贝塞尔曲线

贝塞尔曲线可以用二维点和三维点

性质#

  1. 曲线的起始点和终点一定分别是第一个控制点和最后一个控制点
  2. 对于4个控制点的曲线(3阶),有:b′(0)=3(b1−b0)b'(0) = 3(b_1-b_0),b′(1)=3(b3−b2)b'(1) = 3(b_3-b_2)
  3. 控制点经过仿射变换后,新的控制点绘制出的贝塞尔曲线和直接将贝塞尔曲线上的所有点仿射变换后的新曲线完全一样
  4. 凸包性质:贝塞尔曲线上的所有点一定在所有控制点构成的凸包内

分段贝塞尔曲线#

逐段定义贝塞尔曲线
3阶贝塞尔曲线分段最常用

曲线的连续性#

  • C0C_0连续:第一段的终止点就是第二段的起始点
  • C1C_1连续:第一段的终止点的切线段和第二段的起始点的切线段共线且长度相等

其他曲线#

  1. splines 样条

B-splines B样条,相当于贝塞尔曲线的扩展,有良好的局部性

曲面#

贝塞尔曲面#

  • 本质就是在两个平面上分别应用贝塞尔曲线

几何处理#

  1. 网格细分
  2. 网格简化
  3. 网格正规

网格细分#

Loop 细分#

  1. 将三角形均分成4个
  2. 将顶点分为新顶点和老顶点(新顶点就是均分三角形后出现的顶点)
  3. 新顶点更新:将老顶点中与新顶点共线的点记为ABA\quad B,不共线的记为CDC\quad D,新顶点更新为:
38(A+B)+18(C+D) \frac{3}{8}(A+B)+\frac{1}{8}(C+D)
  1. 老顶点更新:
(1−n⋅u)originalposition+u⋅neighborpositionsum (1-n\cdot u)original_position+u \cdot neighbor_position_sum

其中nn为老顶点的度,uu为:

{3/16,n=33/8n \left\{\begin{array}{rcl} 3/16,&n=3 \\ 3/8n & \end{array} \right.

Catmull-Clark 细分#

  • 很多模型不是只由三角形构成的
  • quad face:四边形面,Non-quad face:非四边形面
  • Extraordinary vertex 奇异点:度不为4的点 细分流程:
  1. 每一条边取他的中点,每一个面也取他中间的一个点
  2. 将边上的中点和面上的中点都连接起来
  3. 面中点:
f=v1+v2+v3+v44 f = \frac{v_1+v_2+v_3+v_4}{4}

边中点:

e=v1+v2+f1+f24 e = \frac{v_1+v_2+f_1+f_2}{4}

旧顶点更新:

v=f1+f2+f3+f4+2(m1+m2+m3+m4)+4p16 v = \frac{f_1+f_2+f_3+f_4+2(m_1+m_2+m_3+m_4)+4p}{16}

性质:

  1. 非四边形面在一次细分后会消失,同时增加对应非四边形面数量的奇异点

曲面简化#

Edge Collapse 边坍缩#

二次误差度量:求新点到原本几个面距离平方和距离最小的新点 每一条边都有其最小二次误差,选取最小的边坍缩后更新与他关联的边的二次误差值

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Profile Image of the Author
机巧叶片
给互联网留下一点微小的贡献
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
最新动态
站点统计
文章
26
分类
6
标签
22
总字数
27,977
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录