计算机图形学_华中科技大学_中国大学MOOC(慕课)


5.3.1_规则形体_01_边界表示

对于规则形体,我们有三类表示方法。

一个是边界表示,也就是用一组曲面或者是平面来描述物体的,这些面,将物体就分为内部和外部。边界表示,典型的例子,就是多边形平面和样条曲面。它们能够为诸如多面体和椭圆体等简单的欧式物体提供精确的描述。进一步来说,样条曲面和构造技术,可以用于设计机翼,齿轮以及其他有曲面的机械结构。

而另一类造型方法是构造实体几何法。它把实体表示成立方体,长方体,圆柱体,圆锥体等基本的体素。然后,用这些体术来组合。可以采用并交叉这样的运算来构造新的形体。

而第三类表示方法,就是空间分割表示。这种方法,用来描述物体的内部性质比较好。将包含一个物体的空间区域划分成为一组小的、非重叠的、连续的实体。当然这种实体,通常采用立方体。

而边界表示具体又包括多边形表面模型和扫描表示两种。其中多边形表面模型,是边界表示中最普遍的方式。

它使用一组包围物体内部的平面多边形,也就是平面多面体来描述实体。大家知道,图形对象的描述,离不开大量的图形信息和非图形信息。对象图形的这个线形,颜色,亮度,以及共模拟分析用的质量、比重、体积就属于非图形信息了。而对象即构成它的点、线、面的位置,相互间的关系和几何尺寸,就是图形信息。

而图形信息,要具体的分为几何信息和拓扑信息两个方面。几何信息,就是指形体在欧氏空间中的位置和大小。而拓扑信息,指的是形体各个分量,比如点、边、面的数目,以及相互间的连接关系。

对于一个用多边形表面模型来表示的对象,我们采用的数据结构需要记录以上三个方面的信息。首先看几何信息。对于一个多边形的平面,其几何信息,可以用几何表来组织,它包括,顶点坐标和标识多边形平面空间方向的参数,具体包括,顶点表。编表和多边形表。

任何多边形平面,都有两个面,也就是内侧面和外侧面。一般来说,法向量的方向,指向物体的外部。

当多边形的顶点序列指定以后,它往往满足一个右手定则。也就是这里的一个情况。我们用这种方法来区分它的。外侧面和内侧面。面的这个内外区分,还是十分重要的。比如这里,有三个茶壶,我们看第三个茶壶,我们给的内表面和外表面就指定了不同的材质,因此,在同样的光照作用下,给人的感觉是不同的。

除了这三张表给出的几何信息,我们还需要增加额外的信息来表示它的拓扑信息。例如,我们可以把编表扩充成包括指向面表和顶点表的指针。

由此,就可以构造出一种一边结构的表示,看这幅图。它对于一个多面体的每一条边就指出它的两个相邻面,以及构成它的两个端点以及它的邻边。那么。这样画出来了以后,就好像伸展的翅膀,所以,我们形象的把它叫做一边结构表示。

反过来,每一个顶点,都有指针指向以该顶点为端点的某一条边。而每一个面,也有相应的指针要指向它的两边。一边结构对于在明暗处理的时候,实现跨越一边的两个多边形之间的平滑光顺特别有利。还可以在几何表中附加信息,比如每条边的斜率等等。这样,一旦顶点输入以后,可以很快地计算出边的斜率,通过扫描坐标值,就可以很快地计算出每个多边形XYZ的最小值和最大值。

多边形的这些边斜率和边界信息,在表面绘制这些处理中非常有用。其实通过之前在软光栅中学习到的多边形扫描转换和区域填充算法,我们就应该能够认识到这一点。当然,最后还需要一个属性表,记录对象的非图形信息。

多边形表面模型的应用是十分广泛的,因为当三维形体的边界用曲面描述的时候,一个很好的近似处理就是把物体的表面看作由多边形网格拼接而成的。很显然,多边形的网格越细致,它就越逼近一个曲面。

这里的多边形的网格越细致,多边形的面片越多,那么它就越逼近这个球面的效果。那么多边形网格,其实有两种类型,一个是三角形带。当给出N个顶点的时候,它会产生N减一个这样的三角形。左边的这幅图,就是这样的,它是一个三角形带。另一个类型,是一个四边形网格。看右边这幅图,它给出了N行M列的顶点,就产生了一个N减一乘以M减一个四边形的网格。

我们经常利用这样的两种多边形网格来建模。比如。大家看这里的直升机。是不是看到它 的四边形网格。还有,这里的地形也是四边形网格。

其实还有一点需要说明,那就是如果多边形的顶点多于三个,他们就有可能不在一个平面上。比如Maya中的这个建模。左边是四边形网格。仔细看,有几个四边形并不是在一个平面上,其实这种情况是需要处理的。那么处理这种情况的一种简单的方法,就是将多边形剖分为三角形。

其实,之前通过对可编程管线的学习,我们知道可编程渲染流水线的流程,大概是这样的。

我们在几何阶段之后,我们会得到这个图形的三角形表示,也可以看作是一个三角形网格。

那么之后这里有三角形设定三角形遍历这些阶段。那么它是由gpu来完成的。

而之后的片源着色片源操作就需要对光照、纹理、阴影进行计算。

总之,有了gpu的帮助,可以很快的完成成千上万甚至上百万个阴影三角形的绘制。

看看扫描表示法。这是一种很有趣的造型方法。它主要利用简单的运动规则生成有效的实体,其实它的基本原理:

我们可以将空间中的一个点、一条边或一个面沿一条路径扫描。这时候所形成的轨迹,就可以来定义一个实体。

这里面,就包括两个要素

一个是做扫描运动的基本图形。比如说这里的圆矩形,封闭样条曲线等等,我们就把这个图形叫基线。

另一个是扫描运动的方式。一般的,我们可以用任何的路径来描述它的这个运动方式。

最常见的就是旋转扫描。它可以沿图形路径。从零到360度进行移动。扫描的基线是一条这样的曲线,绕一个旋转轴做旋转扫描就得到一个曲面了。由这个例子可以看出,旋转扫描法的特点是可以生成一个轴对称的物体。

对于非圆形路径,也可以给定描述路径的曲线函数和沿路径移动的距离,比如这幅图。左边的扫描基线是一条曲线,可是,它扫描的轨迹是一条直线。这个曲线就沿着直线扫描,结果得到了一个曲面。右边的扫描机械是一个圆儿,它的轨迹是一个螺旋形的。像这样运动过后,就得到了一个弹簧的造型。

另外,也可以沿着扫描路径变化剖面的形状和大小。或者当移动这个形状通过某个空间区域的时候,可以变化坡面相对于扫描路径的方向。

这个时候,我们就把它叫做广义扫描法。这里的这幅图,就表示了用不等截面的圆盘做平移扫描构成的圆台。很显然,这种扫描表示把复杂的物体看成简单物体运动的结果。这对于许多领域的工程设计人员都是十分方便的。

例如,建筑设计师可以先设计建筑物的平面图,然后通过平移扫描构造建筑物的模型。

但是,其实这种表示的结果最终对图形编程来说,通常也会得出一个网格表示。比如之前我们看到了刚才花屏的动态生成过程。而它的表示结果,我们来看一下,其实也是一个网格。这种网格的表示就是之后图形渲染的输入。因此,归根结底。扫描表示和多边形表示还是异曲同工的,对于规则形体来说都是十分有效的表示方法。


5.3.2_规则形体_02_构造实体几何法

对于规则形体,我们有三类表示。边界表示、构造实体几何表示和空间位置枚举表示。今天,我们就来学习其中的第二种构造实体几何表示。

提纲

构造实体几何法的本质,在于通过两个指定对象的并,交或者是差的操作来产生一个新的对象

比如这里。我们将一个长方体和一个棱锥放在相邻的位置,并且用并的操作。就形成了一个新的实体。再看右边,这是有重叠部分的一个长方体和一个柱体,那使用交的操作就可以得到a这个b中所生成的实体。

在构造实体几何法中,集合运算的实现,它的这个过程可以用一颗二叉树来描述,我们又把它叫做CSG树。

树的叶子是基本体树或者是几何变换的参数,而树的非终端结点是施加于其子节点的正则集合算子, 或者是几何变换的定义。

我们来看看这两个例子,一个是一个二维的例子,它的基本图元P1是一个圆,P2是一条直线段。T是平移操作,U是并操作,大家会看到把P1和P1平移后的结果,就这两个圆,求并。在和一个把P1平移后的结果并在一起,就是三个圆就并在一块儿了。接下来,这两条直线也通过相应的方法并在一起。于是我们就可以得到右下角的形体。

第二个,是一个三维的例子,这个三维的形体,我们给出了两种方式。左边的这个方法,是先让一个长方体和圆柱体做差。然后再把它的结果和另一个长方体求并。右边,就是先让这两个长方体求并,然后再让它的结果和一个圆柱体做差,也可以得到我们最终的图形对象。

显然,无论怎么表示都是一棵二叉树,而且它的根节点所表示的就是集合运算的最终结果。如果这个方法中所采用的体素是正则的。而所采用的集合运算算子也是正则的,那么所得到的结果也必然是正则几何形体。也就是有效的实体。大家看。这里的直升机。就是用一些部件组合而成的。

可见,构造实体几何法有其固有的优点。那就是,如果体素设置比较齐全,通过集合运算就可以构造出多种不同的符合需要的实体。可是这个方法也有缺陷,那就是当用户输入体素的时候,主要是给定体素 的有关参数,然后需要由系统给定这个体素的表面方程。那么再由系统进行集合的求交运算,最后才能得到生成的实体。

这里面,就存在了两个问题了

第一个,就是集合运算的中间结果。难以用简单的代数方程来表示,求教很困难。

另外一个这个CSG树,不能显示的表示形体的边界,因而无法直接显示CSG树表示的这个形体。

而如果需要求助CSG树受所表示的物体的精确边界。来进行物体显示。代价就很大了,效率也不高。

光线投射算法提供了一个较好的解决方案,那就是不必求出CSG树表示形体的边界。而是直接快速的对形体进行光栅图形显示。

大家看看这幅光线投射的示意图。

光线投射算法的核心思想,是从显示屏幕的每一个像素位置发射一根光线。也就是一条射线,求出射线与距离投影平面最近的可见表面的交点和交点处的表面法矢量,然后根据光照模型计算出表面可见点的色彩和亮度,从而生成实体的光栅图形。

这个算法的关键之处在于确定光线与距离投影平面最近的可见表面的交点。这可以通过集合成员分类算法来实现的

所以,具体的算法大致是这样。首先,将射线与CSG树中所有的基本体素求交,求出所有的交点。然后,将所有交点相对于CSG树表示物体进行分类。确定位于物体边界上的内部分的交点。最后,要对所有位于物体边界上的交点计算它们在射线上的参数值,并且进行排序,确定距离最近的焦点。得到其所在基本体素表面的法矢量。

那么光线投射算法用一维集合运算代替了CSG实体的边界生成算法所需要的三维集合运算,所以还是十分简单可靠的。

但是光线投射算法是近似的,精度当然就取决于显示屏幕的分辨率了。以上,就是非常实用的构造实体几何法。

5.3.3_规则形体_03_空间分割表示

对于规则形体,我们已经学习了其中的边界表示和构造实体几何表示,今天就让我们来学习第三种表示方法,空间位置分割表示。我们将从空间位置、枚举表示、八叉树和BSP树等几个方面进行学习。

空间位置枚举的思想是将包含实体的空间分割为大小相同、形状规则的体素。然后,以体素的集合来表示图形对象。

那么空间位置枚举又有两种经典的方法。一个是八叉树表示法。另一个是BSP树表示法,首先,我们来看看八叉树。

八叉树,又称为分层树结构。它对空间进行自适应的划分,采用具有层次结构的八叉树来表示实体。比如,这里就将一个立方体分成了八个部分,怎么表达?

为了更直观,我们先以四叉树为例来进行学习。对于一个平面图形,当然我们就只需要分成四个部分。每一个部分,就对应节点的一个域。如果这个节点,完全是空的,或者是,完全被占满了,就不需要细分了,我们就直接记为E或者是F。

E是Empty的首字母,F是Full的首字母。否则,它就是属于边界部分,也就是Boundary部分,需要继续细分。那细分的方法怎样?还是分成四个部分,一直这样下去,直到每个部分在满足精度要求的情况下空或者是买。这样,就构成了一个四叉树。

对于三维图形,它就会变成八叉树。因为每个立方体我们看它会分成八个小的子立方体。这个部分如果为空或者满,就不需要再细分,否则,仍然需要继续细分,所以,也会形成这样的一颗八叉树。

一旦对于实体建立了一个八叉树的表示。就可以将各种操作子程序应用到这个实体上了。对于同一空间的两个八叉树表示。我们就可以。进行相应的集合操作,比如说并操作。新的八叉树就通过合并同一个区域的每一个输入数来构造同样通过寻找两颗输入的八叉树的重叠区域。可以进行相应的交的操作。类似的存储仅由一个对象所占据而不被另一对象所占据的八叉树就可以完成差操作。

可以看一看这几个八叉树的实力。会看到。为空或为满的时候就不细分了,否则,他就进行相应的细分。

八叉树中,还有一种松散八叉树的思想。它的基本思想,其实和普通的八叉树是一样的,但是,每一个长方体的这个大小选中就比较宽松。

我们还是以更直观的4X分割为例来看。如果一个普通的长方体的这个边长是L,那么我们就可以在松散八叉树中,用KL来代替,这个K是大于一的,所以看看这幅图。这就是一个普通四叉树和松散四叉树的对比。图里面黑色的圆点,表示长方形的这个中心点。右图中,新型的物体,就刺穿了一个普通四叉数的一个分割平面了。这样一种选择,就是将这个新型的物体,放在最大的这个长方形中。比如根节点的这个长方形中。可是,就可以将长方形放大50%。这样这个新型的这个多边形就完全位于左上角的这个长方形当中了。所以就不需要继续细分。就可以直接的对这样的一个形状进行表达。

推广到八叉树,也是同样的道理。其实大家能够想出八叉树和松散八叉树,是各有利弊的。刚才的这种情况,如果采用一般的八叉树,一定会继续细分,使得数的结构比较复杂。可是采用松散的八叉树,又存在重复的空间,所以,也有额外的空间开销。

除了八叉树,还有一种十分经典的空间分割表示,那就是利用二叉空间分割。大家在数据结构中都学过二叉树,知道在数据结构和算法中,有不少对于二叉树的经典算法,因此,二叉风格应该说是一种更加有效的分割方法。除了每次将空间分割成为两个部分而不是八个部分之外,这种方法,跟我们的八叉树是类似的。利用二叉空间分割,可以每次将一个场景根据任意位置和任意方向的平面分为两个部分。为了实现自适应的空间细分,BSP树提供了一种更加有效的分割方法。

因为可以将分割平面的位置和方向根据适合于对象的空间分布来确定,所以,与八叉树相比,可以减少场景树的表示深度,这样就可以减少搜索树的时间。另外,BSP树可以有效地识别可视面和使用光线追踪算法对空间进行相应的分割。具体来说,它的每一个节点对应一个有效的超平面。那么将其当前空间划分成为前项和背向两个子空间,分别对应当前结点的左子树和右子树。

BSP树,已经在游戏工业上应用了许多年,比如这里的<Doom>就是第一个使用BSP树的商业游戏。那么BSP树的一个有趣的特性是什么?如果用一种特定的方式遍历树的几何内容,可以从任何角度进行前后排序,这个排序,可以近似轴对齐。那么从空树开始,每次选择一个面片作为节点插入到树里面,每次插入一个新的结点,就从树的根结点开始遍历。如果新节点的面片与当前节点的面片,香蕉就把心面片分割成为两个面片。那么新节点在当前节点的前项空间就插入左子树。可是,如果新节点在当前节点的背向空间,就插入右子树。当前节点为空,直接插入新结点,直到所有面片全部被插入倒数中。因此简单来说,如果要创建BSP树,去递归的将一个平面空间一分为二,并且,将几何体归类到这两个空间中来完成。

在计算机图形学中,BSP数又有两大类别,分别是轴对齐和多边形对齐。下面分别简单来进行介绍。

轴对齐,它就是按这样的方式来创建的,首先,将整个场景包围在一个AABB也就是轴对其的包围和中。然后,以递归的方式将这个包围盒分成若干个更小的盒子。那么我们选取盒子的一个轴,生成一个与之垂直的平面,这个时候就可以把盒子一分为二。那么有一些方法可以将这个分割平面固定,从而将这个盒子分成完全相同的两个部分。而也有一些其他的方法,允许这个平面在位置上有一些变化。那么与分割平面相交的物体,要么存储在这个层次上,成为两个子集中的一员,要么就被这个平面分割成为两个不同的物体了。经过这个过程,每个子集就处于一个比较小的盒子中,重复这个平面分割的过程,就可以对每一个AABB进行递归的细分,直到满足某个标准才终止这个分割的过程。而这个标准,通常是用户定义的数的最大深度,或者是盒子里,所包含的几何图元的数量需要低于用户定义的某个值。以及还有相应的这个精度要求。

分割平面的轴线和位置对提高效率是十分重要的。一种分割包围和的方法就是。

轴进行循环,也就是在根节点,沿着X轴对盒子进行分割,然后,再沿着Y轴对棋子盒子进行分割,最后,再沿Z轴对齐孙盒子进行分割。这样,就完成了一个循环周期。使用这种分割策略的BSP树,常被称为KD树。

而另一种常见的策略就是找到盒子的最长边,沿着这条边的方向对盒子进行分割。这幅图,就展示了一种轴对齐的BSP树的分割过程。在这个事例中,允许空间分割位于轴上的任意位置,不一定必须是终点来形成空间体,分别用ABCD一来标识。右图中所示的数,就是当前的BSP树的数据结构。每个叶子节点,就表示一个区域。区域的内容显示在下方,注意黄色三角形在物体列表中含有C和E两个区域,因为它同时覆盖了这两个区域。

那么另一种对齐方式?是多边形对齐BSP树。那么这里面把多边形作为分隔物,对空间进行平分,也就是说,在根节点的地方,选取一个多边形,用这个多边形所在的平面将场景中剩余多边形分为两组。对于与分割平面相交的多边形来说,沿着其中的交线将这个多边形分成两个部分,然后,再分割平面的每个半空间中选取另外一个多边形作为分隔物。 只对这个风格物所在平面的多边形进行继续分隔,直到所有的多边形,都在一个BSP树中为止。需要注意的是,多边形对齐的BSP树的创建是一个非常耗时的过程。好在,这种树通常,只需要算一次,然后存储起来,就可以进行重用了。

这幅图,就是一个多边形对齐的BSP数的实例。

那么这个多边形,分别用A到G来表示。首先,用多边形A对空间进行了分割,分成两个半空间。

分别由多边形B和C在分隔。邮币形成的分割平面与左下角的多边形相交蕉了,所以又把它分割为多边形D和E。最后形成的BSP树就是。这样的一个情况。

通过大家之前对数据结构的学习,大家知道,如果我们得到的是一个完全不平衡树。那么对这个数的操作的效率是非常低的,所以多边形对齐BSP树的分割最好是形成平衡树,也就是每个叶子结点的深度相同或者相差一个层次的树。否则的话,相应的处理效率就很低了。多边形对齐的BSP树的一个典型性质,就是对于一个给定的试点来说,可以对该结构按从后往前或者是从前往后的顺序进行严格的遍历。

那么多边形对齐的BSP树其它的应用也有不少,比如相交测试,碰撞检测等等。那么以上,就是空间位置枚举表示的两种经典方法,八叉树和BSP树。


5.4_遇见非规则_上_自然的奥秘_分形几何

分形图

分型具有以非整数维形式充填空间的形态特征,通常被定义为一个粗糙或零碎的几何形状,可以分成数个部分,而且,每一个部分都是或者至少近似的是整体缩小后的形状,也就是说,具有自相似的性质。

具有整体和局部的自相似性

分形几何的提出

fractal 本意就是不规则的,破碎的,分数的

芒德布罗 ,是想用这个词来描述自然界中传统欧几里得几何学所不能描述的一大类复杂无规则的几何对象。

那么与传统几何相比,飞行几何有什么特点?

第一个特点,是不规则。从整体上看,分形几何的图形,是处处不规则的,例如海岸线和山川的形状。从远距离观察,它的形状是极不规则的。

第二个特点是自相似性。也就是说,在不同的尺度上,图形的规则性又是相同的。比如上述的海岸线和山川的形状。从近距离观察,局部的形状又和整体的形态是相似的。

由于这样的现象在自然界中普遍存在,因此飞行几何学又被称为描述大自然的几何学。

分形维数的概念

而分形几何建立之后,很快引起了各个学科领域的关注。

在分形几何中有一个概念,是分形维数。

这其中的这个大写的D就是分形维数,也叫做相似性维数。当然这个D可以是整数,也可以是分数,所以,我们又常常把地叫做分数维

那么基于这种分形几何的造型技术,就叫做分数维造型。

分数为造型有两个关键问题,一个是分形维数;另一个是生成过程;

分形维数,又称分数维数,是一个数字,用来描述物体细节的变化,这也是分形这个名称的由来。与欧式维数不同,这个数字不一定是整数。生成的过程,指的是维产生物体局部细节指定的一个重复操作。在确定性自相似分形几何的构造方法中,开始的时候,会给定一个称为初始生成元的几何形状,然后,将初始生成元的每部分用一个模型替代,称为生成元。

最后通过多次迭代的过程生成分形物体。

比如这里的初始元是一个Y字形,而生成元则是将每个Y的分叉处再变成一个Y。其实这样多次迭代以后,就给人一种比较真实的感觉了。

著名的希尔宾斯基三角形

它的初始元是三角形。生成元是将三角形分成四个子三角形。

看看这几个著名的分型实例。一个是龙骨曲线。

蕨菜叶和非常著名的门格海绵

科赫雪花曲线

通过这些例子,我们发现分型方法在模拟多种自然现象的时候是很有用的。

在图形学的应用中,分形表示常常用于模拟岩层、云、水、树和其他的植物羽毛、毛皮以及各种漂亮的表面纹理。

自然景物,理论上其实是用重复无限次的过程来表示的。但实际上,考虑到了精度和可计算性,自然景物的分析显示又仅仅只用有限步来完成。

回到刚才的科赫雪花曲线。其实,还有一种方法可以对它进行描述。那就是形状语法。

它通常将一组产生式规则应用到初始的物体,从而增加相应的细节层次。也就是说,形状设计者,需要给定一组产生式规则。

那么从给定的初始的物体到最终的物体的结构,每一次变换都可以用到不同的规则。例如,我们可以用几何变换规则改变物体的几何形状。使用其他的变换规则增加表面的颜色或表面纹理细节。每一条规则,都可以用具有图形运算能力的数学是或者其他过程性方法结合来实现。

以刚才的科赫雪花曲线为例,我们可以用经典的L语法来描述它....以此类推,我们还可以画出更复杂的这样的形状。

这样的形状语言,就能描述任何一条雪花曲线。因此,也是一种有效的表示方法。

在分数为造型的程序中,还会用到一种程序设计思想中非常经典的思想,那就是递归的思想。


5.4_遇见非规则_下_聚沙成塔_粒子系统

在非规则对象的造型方法中,还有一种方法不得不提。那就是粒子系统。

粒子系统,是一组分散的微小物体的集合。其中这些微小物体,按照某种算法来运动。

在计算机图形学中,我们经常使用粒子系统模拟火、爆炸烟、水流、火花、落叶、云雾雪晨,流星的尾迹等等。

微粒系统

我们刚才说是一组分散的微小物体的集合,而这些微小物体的大小和形状,又可以随着时间来变化,也就是说,他们可以按照某种算法运动变化。那么这样的方法,就非常擅长描述随时间变化的物体,因此,可以用于模拟自然景物或模拟其他非规则形状物体,展示流体的性质。而微粒运动的模拟方式,又包括了随机过程模拟、运动路径模拟和力学模拟等等。

比如这里的烟,就很好的展现了流体的性质。

火焰与星云的变化,根据不同的需要,微粒运动的模拟方式,也是完全不同的。

那么生成一个粒子系统,要考虑下面两个方面的问题。

一个是他的两要素,包括粒子本身的造型和粒子的运动方式。

另一个,就是它的两个生成过程,也就是模拟生成过程和粒子效果的渲染两个过程。

首先,我们来看看他的两个要素。

粒子运动的方式,向屏幕方向。喷洒例子。例子本身的造型,是雪花,左边画出来这个雪花的形状。而粒子的运动,就是向上喷射之后,模拟重力的效果落下。

再来看看它的生成过程了,首先就是模拟过程。显然,单一的粒子是完全没有什么效果的。要实现这种粒子的效果,需要持续不断的产生新的微粒,并且让旧的微粒随着时间逐渐的消亡。那么一个单一的粒子通常有一个生命值的变量。并且,从它开始产生就一直在缓慢地减少。一旦它的生命值少于某个极限值,我们就会杀掉这个粒子。这样下一个粒子产生的时候,就可以把它替换掉了。因此,一个最简单的粒子也需要具有以下的属性。包括它的位置、速度、大小和它的剩余生命等等。

可以定义这样一个结构体,基于这样的一个定义,我们可以定义个粒子数组了,但粒子的个数可以灵活地来确定。在绘制的循环中,我们需要计算出每一帧的这个时间差。然后根据这个差值就可以计算出粒子剩余的生命,以及粒子在这段时间的一个位置的变化。

我们可以根据这个德尔塔time来更新例子数组中粒子的相应的生命和位置。同时,我们也需要new出相应的新粒子,替换掉刚才粒子数组中已经死亡的粒子了。到此,我们就模拟了粒子的生成过程了。

接下来,还要进行粒子的渲染。实际上为了提高算法的效率,我们常常就是采用一个平面在模拟粒子。

比如刚才的原型和雪花,其实都不是立体的,而只是一个平面贴图。可是在显示的时候就有要求了,那就是这个粒子的正面始终面向我们的摄像机方向。这时候,就有一种技术很重要,就叫公告板技术。

公告板技术,形象的来说,就好像一个人举着牌子,无论你从哪个方向看牌子,那个人就把这个牌子朝着你的方向旋转,你永远只能看到牌子的正面。

那么我们需要根据例子中心在世界空间的坐标以及观察者的位置,算出粒子的四个顶点的坐标,从而让这个粒子始终面向观察者。

华科_图形学笔记_05_初探造型技术_02相关推荐

  1. 华科_图形学笔记_05_初探造型技术_01

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 5.1_初识造型技术 提纲 现实生活中有很多不同类型的物体,比如树.华.烟云.飞机.沙发等等,那么在计算机内对这些对象图形化也就会遇到不同的问题. ...

  2. 华科_图形学笔记_0402_图形思维的起点_朴素的软光栅(二)_03

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 4.5_巧妙的区域填充 提纲 区域的定义: 指已经表示成点阵形式的填充图形,它是像素集合 一个点P的4-邻接点指的是它上下左右四个相邻的接点 一个 ...

  3. 华科_图形学笔记_09_奇妙的真实感_片元着色01_02

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 9.3_光照明模型_上_Phong模型初步 首先,我们来看看光照模型发展的历史. 在1967年,Wylie等人,第一次在显示物体时加进了光照的效果 ...

  4. 华科_图形学笔记_09_奇妙的真实感_片元着色02

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 9.4_让人头疼的纹理_上_颜色纹理 在之前的光照模型中,我们看到在给物体加上了光照之后,物体获得了一定的真实感. 可是大家也会发现一个现象,那就 ...

  5. 华科_图形学笔记_0201_认识图形系统

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 提纲 计算机一个十分重要的功能"交互" 对于这个球,用户可以很方便的对其进行修改,这一侧增加一个凸起,另一侧也增加一个,总之最 ...

  6. 华科_图形学笔记_07_投影变换

    计算机图形学_华中科技大学_中国大学MOOC(慕课) 7.1_有趣的投影 由于我们的观察设备是二维的,因此,最终都存在一个三维向二维的映射过程.这个映射过程,按照几何意义来说就是投影. 而在我们之前讲 ...

  7. 计算机图形学中向量点乘和叉乘的用途_图形学笔记(一):基础知识

    从这便文章开始整理学习到的计算机图像学相关知识,原则是只写我没在网上找到清楚解释的内容,如果有很好的文章介绍相关内容,我会直接把链接贴上. 首先弄清 Computer Graphics和 Comput ...

  8. java bresenham画直线_图形学笔记: Bresenham画线算法

    图形学课本, 按规矩介绍完矩阵行列式, 第一个算法肯定就是Bresenham画线算法了. 來我们來看看算法 Bresenham是用来画一些不反走样的线段的. 都说了线段肯定有起点和终点, 假设我们: ...

  9. 计算机图形学 | 探秘造型技术

    计算机图形学 | 探秘造型技术 计算机图形学 | 计算机图形学 | 探秘造型技术 5.1 初识造型技术 什么是造型技术? 图形的构成 实体的定义 5.2 样条的魔力 样条的概念 插值与逼近样条 连续性 ...

最新文章

  1. Matlab系统信息、系统命令和跨平台
  2. GDCM:gdcm::ExplicitDataElement的测试程序
  3. QT的QSslSocket类的使用
  4. 安装Cocoapods详细教程
  5. discuz论坛 java,如何添加Discuz论坛的应用
  6. memcached安装和php扩展memcache安装
  7. NEWS - InstallShield 2015 正式发布
  8. 多浏览器判断,切换及使用
  9. 手机MODEM 开发(30)--- VoLTE无线功能
  10. Flink的窗口聚合操作(Time\Count Window)
  11. php初学遇到的问题。
  12. 产品配件类目税目分类_2017年商品税收分类编码明细表
  13. 仿美洽客服系统-gin框架内核独立自主源码开发在线客服系统
  14. Mac Windows fliqlo 时钟屏保
  15. 分析咪蒙1013篇文章,300多万字,她凭什么会火?
  16. 为什么电脑屏幕会横过来_电脑屏幕横过来了怎么办
  17. 《生死疲劳》读书有感
  18. 微信公众号开发工具汇总
  19. 安装Windows提示无法在驱动器0分区上安装windows解决方法
  20. G4560和G4600买哪个好?

热门文章

  1. 因安装搜狗输入法而引发的一系列惨案
  2. python 1、输入a,b,c解二元一次方程;2、克莱姆法则解线性方程;3、输入今天之后未来的天数,显示今天是星期几;4、输入一个数,检测是否能被5和6整除;5、输入人民币和美元的汇率和转换金额;
  3. 攻防世界——web新手题
  4. 计算机数学与高中数学衔接,高中数学的断层与衔接研究论文
  5. 科大讯飞AI营销大赛 CTR预估总结
  6. Android多线程断点续传下载原理及实现,移动开发工程师简历
  7. Excel VBA 002 录制宏
  8. Rockchip Linux PCIe 开发指南
  9. 一起领略css3动画的强大
  10. 2023最新最强网盘资源搜索引擎,聚合搜索6大网盘资源