计算机图形学之几何(Geometry)
Geometry(几何)
笔记来源:
Lecture 10 Geometry 1 (Introduction)
Lecture 09: Introduction to Geometry (CMU 15-462/662)
How can we describe geometry?
如果图像过于复杂,则使用三角形对其进行表示可能有些困难,这时就需要其他表示方法
显式表示和隐式表示
下图截自Implicit surface
0. Curves and Surface
0.1 Curves
camera path
相机按照path运动
animation curves
模型按照curves运动
vector fonts
curves可以制造字体
0.2 Surface
1. Implicit Representation
隐式表示:表面上的点满足特定关系,如 x 2 + y 2 + z 2 − 4 = 0 x^2+y^2+z^2-4=0 x2+y2+z2−4=0,即 F ( x , y , z ) = 0 F(x,y,z)=0 F(x,y,z)=0。缺点:判断哪些点在表面上较难。优点:容易判断某些点在表面的内部( F ( x , y , z ) < 0 F(x,y,z)<0 F(x,y,z)<0)还是外部( F ( x , y , z ) > 0 F(x,y,z)>0 F(x,y,z)>0)
1.1 Algebraic Surface
1.2 Constructive Solid Geometry
简单几何体之间进行布尔运算得到复杂几何体
1.3 Level Set Method
1.4 Blobby Surfaces
1.5 Fractals
1.6 Blending Distance Function
2.Explicit Representation
显式表示要么直接定义点的位置,要么通过参数定义点的位置
参数映射将平面中某点映射到空间中某点
2.1 Point Cloud
2.2 Triangle Meshes
2.3 Polygon Meshes
2.4 Bezier Curves and Surfaces
Bezier Curves
如何画一条贝塞尔曲线?De Casteljau algorithm
在控制点连接的每一条线段上找同一个时间 t t t(参数)对应的点的位置,将相邻线段上的相同时间的点连接起来,最终两个相邻线段成为一条线段,此线段上时间 t t t处的点就是曲线上的点。
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
控制点的移动会影响曲线的形状
若令 s = 1 − t s=1-t s=1−t,则各项系数就是 ( s + t ) 2 (s+t)^2 (s+t)2的展开式 s 2 、 2 t s 、 t 2 s^2、2ts、t^2 s2、2ts、t2
贝塞尔曲线的代数表达式是一个多项式,即Berstein polynomials
当控制点多的时候(高阶贝塞尔曲线)不太好利用中间的控制点进行控制得到想要的形状
上面应用中一次用所有的控制点绘制一个贝塞尔曲线(一次定义),能否用其中的某几个控制点绘制一段贝塞尔曲线然后将各段相连(逐段定义),常用4个控制点(三次贝塞尔曲线)去定义一段贝塞尔曲线
多段贝塞尔曲线拼接过程中如何保证连接处的连续性?连接处的两个线段所在的切线方向一致,模长相等
![]() | ![]() |
Bezier Surfaces
横向来看每条贝塞尔曲线有4个控制点,四条贝塞尔曲线,纵向以时间t为参数连接四条曲线上的点形成曲线,该曲线滑动构成贝塞尔曲面
![]() | ![]() |
![]() | ![]() |
2.5 Spline
Spline
样条意思是指通过一组给定点集来生成平滑曲线的柔性带。此概念源于生产实践,“样条”是绘制曲线的一种绘图工具,是富有弹性的细长条。绘图时用压铁使样条通过指定的形值点(样点),并调整样条使它具有满意的形状,然后沿样条画出曲线。
在计算机科学的计算机辅助设计和计算机图形学中,样条通常是指分段定义的多项式参数曲线。由于样条构造简单,使用方便,拟合准确,并能近似曲线拟合和交互式曲线设计中复杂的形状,样条是这些领域中曲线的常用表示方法。–引用自:样条
B-Splines
B样条是对贝塞尔曲线的扩展,在贝塞尔曲线中移动某一个控制点会使得整个曲线发生变化,如果我们只是对曲线中其他范围的曲线较为满意,而对某一个较小范围的部分曲线不满意,我们只想在修改较小范围的曲线时不影响其他范围内的曲线变化,在B样条中实现了对曲线在可控范围内的修改
2.6 NURBS(Non-Uniform Rational B-Spline)
非均匀有理B样条
2.7 Subdivision Surfaces
![]() | ![]() |
![]() | ![]() |