一、计算机图形的绘制
1、光栅化过程
光栅化就是将物体绘制到屏幕上的一个操作。
(1)顶点数据输入(Vertex Data):物体都是三角形构成的,输入的数据也是三角形的位置数据等;
包括:位置:每个顶点的xyz坐标;颜色:每个顶点的rgb颜色;其他数据:法线、uv、切线……
(2)三维变换(Transform)(针对物体的顶点):MVP
模型变换:负责模型在三维世界的平移、旋转、缩放等操作;:负责模型在三维世界的平移、旋转、缩放等操作;
视图变换:与摄像机有关的矩阵,把模型转换到摄像机坐标系中;
投影变换:将最终的图像投影到视景体中(理解为投影到屏幕窗体上)
(3)图元装配(Assembly):物体的顶点被投影到屏幕上之后,会按照拓扑关系组成一个个的三角形,这个组装的过程就称为图元装配。
(4)剪裁剔除(Clip&Cull):在观察3D世界过程中,总有一些眼睛看不到的区域,这些区域中的图元就应该被剪裁掉,另外背对我们的面片也应该剔除掉,进而增加渲染效率;
(5)光栅化(Rasterization):在经过了剪裁剔除后幸存的三角形们将会被离散为一堆像素
①视口变换(通过视口变化矩阵把单位立方体映射到屏幕空间),得到屏幕空间的三角形(三角形的离散化)。
②三角形打碎打成像素并告诉每个像素的值是多少,然后显示在屏幕上。
(6) 片元着色(FragmentShading):上述的离散后的像素,经过片元着色计算,会得到各自最终的颜色;
(7)混合与测试(Blending&Test):最后所有的像素在输出到屏幕前,会处理半透明跟前后遮挡的问题,这些问题就是在这一步做到的。
思路:具有把顶点数据转换为片元的过程,将图转化为一个个栅格组成的图象的作用。要进行光栅化需要进行采样,采样的过程中会带来一些瑕疵,俗称走样,要进行反走样的操作。采样->走样(无法避免只能消除)->反走样
两个原因导致锯齿:一是像素本身有一定的大小,二是采样的速度跟不上信号变化的速度(高频信号采样不足)。
走样带来的瑕疵:锯齿、摩尔纹、车轮现象
反走样:①增加采样率②先做模糊(低通滤波)再采样。
MSAA 多重采样抗锯齿(超采样)的算法是将一个像素划分成许多个小像素,每个小像素都有一个中心,算面积覆盖率就是可以等同于有几个采样点在这个三角形,如果像素点足够多的话就可以取得比较好的结果。
参考文章:
2、视锥体裁剪基本概念
视锥体是摄像机可见的空间,看上去像截掉顶部的金字塔。只有处于相机视角范围内的物体才需要被渲染和显示。
为了防止物体离摄像机过近,设置近裁剪面(Front Clipping Plane)。同时为了防止物体离摄像机太远而不可见,设置远裁剪面(Back Clipping Plane)。从摄像机发散的线 4 条线,与裁剪面相切构成的 4 个面是视锥面(Viewing Frustum),分别对应屏幕的四个边界。
在视锥体中,比近剪裁面更靠近摄像机的任何对象以及比远裁剪面更远离摄像机的任何对象都不会被渲染,任何落在图像视锥面之外的物体对摄像机而言均不可见。摄像机看到的内容都是处于视锥体中的内容。
视锥体(截头金字塔) = 4 个视锥面 + 1 个近裁剪面 + 1 个远裁剪面
判断节点是否在视锥内:
通过各种包围体方法求出近似包围体,对包围体上的各个点对视锥六个面作判断,存在以下三种情况:
所有顶点都在视锥范围内,则待判区域一定在视锥范围内;
部分顶点在视锥范围内,则待判区域与视锥体相交,我们同样视为可见;
所有顶点都不在视锥范围内,那么待判区域很可能不可见了,但有一种情况例外,就是视锥体在长方体以内,这种情况我们要加以区分。
3、深度缓存算法(Z-Buffer)
z越小,离我越近,重叠时只看到z小的。
同时维护一个渲染图(Rendering)和深度图(Depth / Z buffer)。复杂度为 O ( n )
深度图(深度缓冲器):存储图像空间中每一像素的深度值,初始化为最大深度值(z 坐标)。在算法处理到其他物体时,Z-Buffer 算法会根据当前物体深度信息更新渲染结果并更新深度图。
渲染图(帧缓冲器):存储图像空间的每一像素的颜色值,初始化为屏幕的背景色。
如果某一三角形深度较浅,则在光栅化时就会遮挡到之前画的像素。即物体中的三角形距离我们越近颜色就越黑,越远颜色就越白。
如果我们使用了 MSAA 算法,则 z-buffer 计算时就不仅仅是考虑每个像素做深度测试了,而是要对每一个子像素做深度测试。
画家算法
需要先对所有物体的深度进行排序,然后依次按顺序画在屏幕上(光栅化)。画家算法虽然思想简单,但并不能解决所有的遮挡问题 O(nlogn)
4、半透明颜色Alpha混合算法
Alpha 通道:8 位的灰度通道,该通道用 256 级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,其中黑:全透明,白:不透明,灰:半透明。α为像素涵盖率,即前景不透明的比例。值被存储在一个单独的灰度图像上,叫做 alpha 层(或是存在 RGB 外的第四个分量上 RGBA)简单来说,我们一般采取RGBA,A 就表示一个透明度。
目前常用到的算法是 AlphaBlend。
计算公式如下:假设一幅图象是 A,另一幅透明的图象是 B,那么透过 B 去看 A,看上去的图象 C 就是 B 和 A 的混合图象,设 B 图象的透明度为 alpha(取值为 0-1,1 为完全透明,0 为完全不透明)。
R(C)=(1-α)*R(B) + α*R(A)
G(C)=(1-α)*G(B) + α*G(A)
B(C)=(1-α)*B(B) + α*B(A)
R(x)、G(x)、B(x)分别指颜色 x 的 RGB 分量原色值。从上面公式可知,α其实是一个决定混合透明度的数值。改变这个α值可以得到一个渐变的效果。
分离 RGB 色用"位与"、"移位"运算的方法。
透明的比例按 2 的 N 次幂来分级,这样可以快速运算。
如果是按 32 级,α = 1/32,B 图的权重 = (32-n)/32,则 A 图的权重= n/32,可以得到这样的算法:R(C)= (32-n) * R(B)+ n* R(A);再对 R(C)右移 5 位(除以 32)即可。
透明的处理:假设指定 B 上的黑色透明色,则碰到 B 上的颜色为黑色,则不显示黑色,改为显示 A 上这个位置的颜色。
5、Bresenham直线与圆绘制算法(看与中点的远近)
Bresenham 画线算法
计算机是如何画直线的?简单来说,如下图所示,真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线。接下来的问题就是如何尽可能高效地找到这些离散的点,Bresenham直线算法就是一个非常不错的算法。
Bresenham 直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n维光栅上最接近的点。这个算法只会用到较为快速的整数加法、减法和位元移位,常用于绘制电脑画面中的直线。是计算机图形学中最先发展出来的算法。
光栅线生成算法,仅使用增量整数计算,垂直轴表示扫描线位置,水平轴标示像素列。本例以单位 x 间隔取样,需要确定每次取样时两个可能的像素位置中的哪一个更接近于线段路径。通过对比两像素与实际线段偏移比值的整型参数进行符号检测。
直线的中点 Bresenham 算法
可确定 x 主位移方向,x 方向每走步 1,y 方向是否走步取决于中点误差项,中点 M 在理想直线下:y 走步。
画法:
直线(斜率<=1,>1时x,y反过来即可)
通过两个端点得到dx,dy。从而得到P0 =2dy-dx
由P0,得到下一步怎么走
P0 >= 0 则x0,y0均加1,得到x1,y1。P1=P0+2dy-2dx
P0<0 则x0加1。P1=P0+2dy
重复一个过程直到到达终点
具体画法参考下面的文章:
[学习]bresenham算法绘制直线_哔哩哔哩_bilibili
圆的中点 Bresenham 算法
可 x 方向为主位移方向,x 方向每走步 1,y 方向是否走步取决于中点误差值。
画法:
圆(只需要画1/8圆)
输入圆的半径。从而得到P0 =1-R(R不为整数时5/4-R)
由P0,得到下一步怎么走
P0 >= 0 则x0,y0均加1,得到x1,y1。P1=P0+2*(x0-y0)+5
P0<0 则x0加1。P1=P0+2x0+3
重复上一步,直到x>=y
具体画法参考下面的文章:
二、三维图形的生成与编辑
1、曲线与曲面的基本概念
曲面边界对象的等式可用参数或非参数形式表示,附录A给出了参数和非参数表示的总结和有关对比。计算机图形应用中有用的各种对象有二次曲面(球面、椭球面、环面)、超二次曲面(超脱椭圆、超椭球面)、多项式和指数函数及样条曲面。这些输人对象的描述一般都用多边形网格来近似表示其表面。
更多内容可以参考下面的文章:
2、贝塞尔曲线绘制(de Casteljau算法)
Bezier 曲线的定义
Bezier 曲线是控制多边形的控制点关于 Bernstein 基函数的加权和。
de Casteljau 算法
依次对原始控制多边形的每一边执行同样的定比分割,所得的分点就是第一级递推生成的中间顶点(i=0,1,...,n-1),对由这些中间顶点构成的控制多边形再执行同样的定比分割,得到第二级递推生成的中间顶点
(i=0,1,...,n-2),重复进行下去,直到 r=n,得到一个中间顶点
,该点的轨迹即为 Bezier 曲线上的点 P(t)。
更多内容可以参考下面的文章:
贝塞尔曲线与de Casteljau算法-CSDN博客
3、loop网格细分算法
Loop细分是一种专门针对三角形面的细分方法。
n为度数
可参考以下文章:
计算机图形学十一:曲面细分(subdivision)与曲面简化(Smplication) - 知乎
[OpenGL] 网格细分算法 Loop Subdivision - 附我的实现结果_opengl glut loop细分-CSDN博客
4、Catmu11-Clark网格细分算法
正如上文所说Loop细分针对是所有三角形面,那么对于不仅仅只有三角形面该怎么办呢?这也就有了Catmull-Clark细分,这里以四边形面和三角面的混合为例:
(1)对于所有不是四边形的面,称之为Non-quad face
(2)所有度不为4的顶点称之为奇异点
(3)每次细分步骤如图中右下角所示,在每个面中都添加一个点,在每条边的中点也都添加一个点,面上的新顶点连接所有边上的新顶点,结果如下图所示:
与Loop细分类似,同样需要去调整各类顶点的位置,这里将所有的顶点分为三类,对于各类顶点位置调整如下图所示:
可参考以下文章:
计算机图形学十一:曲面细分(subdivision)与曲面简化(Smplication) - 知乎
Catmull 细分曲面 (Catmull-Clark subdivision) 详解 附Python 完整代码-CSDN博客
三维网格细分算法(Catmull-Clark subdivision & Loop subdivision)附源码 - 算法小丑 - 博客园
三、三维对象的表示与变换
1、三维数据表达方法
线框模型
勾勒物体轮廓,用顶点和棱边表示物体,无表面和体积,只使用顶点表和边表两个数据结构就可描述。
优点:可产生任意方向的视图,视图间保持正确的投影关系。
缺点:不能绘制明暗处理效果图
表面模型
用物体外表面集合定义物体,无体积概念,是空壳。增加了一个面表,用来记录边与面的拓扑关系。
优点:可对表面进行平面着色或光滑着色,可为物体添加光照或纹理等。
缺点:无法进行物体之间的并交差运算;不能确定面在内还是在外。
实体模型
有体积概念,内部外部概念。表面有正反之分。拓扑合法的物体在相邻两个表面的公共边界上,棱边的方向正好相反。
根本区别:数据结构不仅记录了顶点的几何信息,还记录了线、面、体的拓扑信息。常采用集合论中的并、交、差等运算来构造复杂物体。
2、Delaunay三角剖分
相关概念:
三角剖分(triangulation)就是对给定的平面点集,生成三角形集合的过程。考虑平面点集 P={P1...Pn},我们希望得到三角形集合 T=在{t1...tm},满足:
(1)所有三角形的端点恰好构成集合 P。
(2)任意两个三角形的边不相交(要么重合,要么没有交点)。
(3)所有三角形的合集构成 P 的凸包(convex hull)。
由于给定点集的三角剖分不唯一,“最优”的三角剖分,希望更接近等边三角形。以下是几种常见的质量评定标准:
(1)最小角(minimum angle):即所有三角形的内角当中最小的角。
(2)纵横比(aspect ratio):三角形最短边与最长边的比例。
(3)半径比(radius ratio):三角形内接圆半径的两倍与外接圆半径的比例。
Delaunay 三角剖分:所有三角形的外接圆均满足空圆性质的三角剖分,称为一个 Delaunay 三角剖分。
空圆性质:即一个三角形(或边)的外接圆范围内(边界除外),不包含点集 P中的任何顶点。
例如:左 1 的三角剖分是 Delaunay 的,2 的三角剖分不是 Delaunay 的,因为下面的两个三角形的外接圆内部都包含了顶点。3 局部 Delaunay 边,4 啥也不是
(1)对三角剖分中的一个三角形,如果其外接圆满足空圆性质,称为一个 Delaunay三角形。
(2)对三角剖分中的一条边,若存在一个外接圆满足空圆性质,称为一条 Delaunay边。(一条边的外接圆可以是经过这条边两个顶点的任意圆,不唯一。)
(3)对三角剖分中的一条属于两个三角形 t1,t2 的边 e,若存在一个外接圆不包含三角形 t1,t2中的任何顶点称为局部 Delaunay 边。若一条边只属于一个三角形,也属于局部 Delaunay 边。
(4)Delaunay 边一定是局部 Delaunay
Delaunay 引理
对一个三角剖分 T,以下三个命题相互等价:
(1) T 中所有三角形均为 Delaunay 三角形。(Delaunay 三角剖分的定义)
(2)T 中所有三角形的边均为 Delaunay 边。
(3)T 中所有三角形的边均为局部 Delaunay 边。
翻转边算法(flip algorithm):
定理:对三角剖分 T 中的一条边 e,若它不是局部 Delaunay 的,则可以被翻转成为一条局部 Delaunay 边 e’。
每进行一次翻转边操作时,都把三角剖分“局部”地改善了。更具体的讲,有以下结论:
(1)最小角增大
(2)外接圆半径缩小
(3)四点共圆的情况:若一条边 e 的两个相邻三角形的顶点 A,B,C,D 四点共圆,则无论翻转与否,这条边都是局部 Delaunay 边。
对任意一个三角剖分 T,只要持续进行上述的翻转边操作,最终总可以转化为一个 Delaunay 三角剖分。这实际上提供了一种构造 Delaunay 三角剖分的思路:Lawson 算法
Delaunay 三角剖分的最优性质
(1)最大化最小角性质:
在给定点集 P 的所有三角剖分当中,Delaunay 三角剖分得到的最小角(所有三角形的内角中的最小值)是最大的。
(2) 最小化外接圆性质
在给定点集 P 的所有三角剖分当中,Delaunay 三角剖分得到的最大外接圆半径(所有三角形的外接圆半径中的最大值)是最小的。
(3)若点集 P 中任意四点不共圆,则存在唯一的 Delaunay 三角剖分 T。若点集 P中四点 A,B,C,D 共圆,且△ABC,△BCD 属于 Delaunay 三角剖分 T,那么将边 BC翻转后得到的三角剖分 T’(包含△ABD,△ACD)同样是一个 Delaunay 三角剖分。
Delaunay 三角剖分的构造算法
大部分 Delaunay 三角剖分的构造算法都是通过逐点插入来实现的,这里我们介绍两种: Lawson 算法和 Bowyer-Watson 算法。
Lawson(边翻转)算法
(1)先计算点集 P 的包围盒(bounding box),将包围盒的四个顶点加入 P 中得到P’。根据包围盒生成两个超三角形(super triangles),构成初始三角剖分 T0 。由于只包含两个直角三角形, T0 是(包围盒四个顶点的)一个 Delaunay 三角剖分。
(2)将点集 P 中的顶点逐一插入现有的三角剖分 Ti 中,并进行如下调整:
①设插入的顶点 v 位于三角形 t 中,将 v 与三角形的三个顶点连接,使 t 分裂为3 个三角形t1,t2,t3。
②分别检查 t1,t2,t3 是否满足空圆性质,若不满足则进行翻转边操作,直到没有坏边为止。此时得到一个包含顶点 v 的新 Delaunay 三角剖分。
(3) 当最后一个顶点插入到三角剖分中,并且完成所有翻转边操作后,我们得到了点集 P’的一个 Delaunay 三角剖分。现在删除第一步中加入的包围盒的四个顶点,并且去除所有与它们连接的三角形,则剩下的三角形就构成点集 P 的Delaunay 三角剖分 T。
Bowyer-Watson 算法
Lawson 的改进:在插入新的顶点之后,不要立刻与旧顶点连接生成新的三角形,再去逐一翻转坏边。而是先去寻找哪些边是需要翻转的,直接将这些边删掉形成一个“空穴”(cavity),然后在空穴当中连接新的边。
(1) 同 Lawson 算法
(2)将点集 P 中的顶点逐一插入现有的三角剖分中,并进行如下调整:
①在现有三角剖分中,所有外接圆包含顶点 v 的三角形的合集构成一个“星形多边形”(star shaped polygon)。星形多边形的含义是多边形的任何一个顶点到v 的连线都在多边形内部。
②对于上述星形多边形,将其内部的三角形全部删除,形成一个“空穴”。将空穴边界的顶点与新添加的顶点 v 连接得到新的三角形,替代剖分中被删除的三角形,此时得到一个包含顶点 v 的新 Delaunay 三角剖分。
(3)同 Lawson 算法
详细内容可以参考下面的文章:
基于逐点插入的Delaunay三角化算法原理_lawson算法-CSDN博客
3、网格拓扑与流形基本概念
网格:
一系列的面片 F = (fi,f2,...,fn) F = (fi,f2,...,fn),每一个面片都是三角形;
一系列的顶点 V = (v1,v2,...,vn) V = (v1,v2,...,vn),F 中的每个面片是 V 中顶点的序列组。
例如:f1 - (v1,v2,v3v1,v2,v3)
拓扑结构:
图形学中的网络拓扑结构指的是多边形网格的连接结构。
二维流型:如果局部拓扑处处等价于一个圆盘;
带边界的二维流型:边界上的边仅属于一个三角形。
4、二维和三维图形的矩阵变换方法及应用
同数字图像处理,传送门:数字图像处理考研考点(持续更新)-CSDN博客
5、 八叉树
6、BSP树
四、消隐算法
由于投影变换失去了深度信息,往往导致图形的二义性。要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面(或可见线判定、可见面判定),或简称为消隐。经过消隐得到的投影图称为物体的真实感图形。
所有隐藏面消隐算法必须确定:
在沿透视投影的投影中心或沿平行投影的投影方向看过去哪些边或面是可见的
1、物体空间的消隐算法:Roberts 算法和光线投射法。
以物体中的物体为处理单元。假设场景中有 k 个物体,将其中一个物体与其余的 k-1 个物体逐一比价,仅显示它可见表面以达到消隐的目的。(此类算法通常用于线框图的消隐)
Roberts 算法
算法要求所有被显示的物体都是凸的,对于凹体要先分割成多个凸体的组合。
Roberts 算法基本步骤:
(1)逐个的独立考虑每个物体自身,找出为其自身所遮挡的边和面(自消隐);
(2)将每一物体上留下的边再与其他物体逐个的进行比较,以确定是完全可见还是部分或全部遮挡(两两物体消隐);
(3)确定由于物体之间的相互贯穿等原因,是否要形成新的显示边等,从而使被显示的各个物体更加接近现实
光线投射法
由视点出发穿过观察平面上一像素向场景发射一条射线
求出射线与场景中各物体表面的交点
离视点最近的交点的颜色即为像素要填的颜色。
光线投射算法对于包含曲面,特别是包含球面的场景有很高的效率。
2、图像空间的消隐算法:Z-buffer(Z 缓冲区) 消隐算法, 区间扫描线算法, Warnock 消隐算法。。。
以屏幕窗口内的每个像素作为处理单元。确定在每一个像素处,场景中的 k 个物体哪一个距离观察到最近,从而用它的颜色来显示该像素。(这类算法是消隐算法的主流,因为物体空间的消隐算法计算量太大)
z-buffer算法思想
基本思想:对屏幕上每一个像素点,过像素中心做一条投影线,找到此投影线与所有多边形交点中离观察者最近的点,此点的属性(颜色或灰度)值即为这一屏幕像素点的属性值。
(1)先将乙缓冲器中各单元的初始值置为最小值
(2)当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值
(3)如果大于原来的z值,说明当前多边形更靠近观察点用它的颜色替换像素原来的颜色
Warnock 消隐算法
整个屏幕可以称为窗口,窗口子分算法是一个递归的四等分过程,每一次把矩形的窗口等分成四个相等的小矩形,分成的矩形也可以称为窗口,如果可以确定小窗口内的多边形可见,则显示这些多边形,否则将小窗口细分为更小的窗口,递归地执行上述过程。
八叉树基本思想
将能够包含整个场景的立方体,即八叉树的根结点,按照x,y,z三个方向中的剖面分割成八个子立方体,称为根结点的八个子结点。对每一个子立方体,如果它包含的表面片少于一个给定的值,则该子立方体为八叉树的终端结点,否则为非终端结点并将其进一步分割成八个子立方体;重复上述过程,直到每个小立方体所包含的表面片少于一个给定的值,分割即告终止。
优先级排序表算法(油画家算法)
优先级排序表算法按多边形离观察者的远近来建立一个多边形排序表,距观察者远的优先级低,放在表头;近的优先级高,放在表尾
从优先级低的多边形开始,依次把多边形的颜色填入帧缓冲存储器中
表中距观察者近的元素覆盖帧缓冲存储器中原有的内容
当优先级最高的多边形的图形送入帧缓冲器后,整幅图形就形成了
类似于油画家绘画过程,因此又称为油画家算法。
详细内容可以参考以下内容:
计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结_计算机图形学实验zbuffering消隐实现-CSDN博客
五、真实感图形渲染
1、纹理映射基本概念
纹理:物体表面细节
纹理映射:为物体表面添加纹理。将纹理空间坐标映射为物体空间坐标,再进一步映射为图像空间二维物体表面坐标的过程。
最常用的纹理类型:颜色纹理和几何纹理
颜色纹理:
通过颜色变化表现出来的表面细节。采用图像纹理或函数纹理描述。
两种实现方法:一是直接用纹理的颜色替代物体表面颜色,可不进行光照计算。二是纹理数据参加光照计算,纹理会显示出光照效果。
几何纹理(凹凸纹理):
无需修改表面几何模型,即能模拟表面凹凸不平效果的有效方法。
基本思想:用简单光照模型计算物体表面的光强时对物体表面的法矢量的方向进行微小的扰动,导致表面光强的突变,产生凹凸不平的真实感效果。
双线性插值、双三次插值见数字图像处理
详细内容可以参考以下内容:
2、反走样常用方法
什么是反走样?常用的反走样方法有哪三种?
在光栅图形中,非水平和垂直的直线用象素集合表示时,会呈锯齿状,这种现象称之为走样。
反走样方法:提高分辨率、区域采样(非加权区域采样、加权区域采样)
区域采样方法假定每个像素是一个具有一定面积的小区域,将直线段看做具有一定宽度的狭长矩形。当直线段与像素有交时,求出两者相交区域的面积,然后根据相交区域面积的大小确定该像素的亮度值。
过采样(超采样);区域采样(像素采样)
详细内容可以参考以下内容:
3、BRDF光照模型基本概念
BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数)是真实感图形学中最核心的概念之一,它描述的是物体表面将光能从任何一个入射方向反射到任何一个视点方向的反射特性,即入射光线经过某个表面反射后如何在各个出射方向上分布。BRDF模型是绝大多数图形学算法中用于描述光反射现象的基本模型。
BRDF光照模型可分为几种:经典光照模型、数据光照模型、基于物理的光照模型
经典光照模型:Lambert漫反射模型、Phong模型、Blinn-Phong模型
基于物理的光照模型:PBR光照模型(Cook-Torrance 和 Ward)
详细内容可以参考以下内容:
4、光线追踪算法
直接光照+反射方向间接光+折射方向间接光
从虚拟摄像机(观察点)发射出大量光线,这些光线会与场景中的物体(如球体、平面等几何物体)发生相交测试,计算出光线与物体的交点、交点处的光照效果(包括反射、折射、阴影等),然后根据这些信息确定最终像素的颜色,通过追踪众多光线来构建出整个图像。
详细内容可以参考以下内容:
5、AABB包围盒碰撞检测算法
详细内容可以参考以下内容:
六、计算机动画
1、关键帧插值
关键帧系统可以从两个(或多个)关键帧的描述生成一组插值帧。
线性插值和曲线/样条
变形:
模拟加速度:
2、动作捕捉技术
3、前向动力学算法
父级控制子级
详细内容可以参考以下内容:
4、粒子系统基本概念
模拟不规则模糊物体最为成功的一种图形生成算法。
基本思想:将许多简单形状的微小粒子作为基本元素聚集起来,形成一个不规则的模糊物体,从而构成一个封闭系统-粒子系统。
粒子基本属性:初始位置、大小、运动速度和方向、颜色、透明度、形状和生命周期
每一帧:生成新粒子,计算粒子间的作用力,更新粒子的位置和速度,移除消亡的粒子,渲染粒子。
力:摩擦力、引力、碰撞