最近看了好几本图形学的书,都是中国人写的,感觉讲什么的都有,不同的书讲的内容都不同。于是又翻了下孙家广的《计算机图形学(第三版)》,又看了下图形学圣经《计算机图形学原理及实践 C语言描述》的目录,发现还是圣经涵盖的内容广泛,几乎涉及了其它图形学教材的所有内容。东西太多,看完有点乱,于是自己梳理一下,看看到底有些什么。
粗略的看,计算机图形学分为两方面内容,一是建模,二是变换,三是渲染。所谓建模,就是将一个现实中的物体或者想象出来的物体做成一个模型,使计算机能够识别。所谓变换,就是将空间中的实体变换到屏幕上。所谓渲染,就是在屏幕上显示出来一些场景。
1、建模
建模方面涉及的内容相对较少,这部分主要是和数学有关。因为计算机的基础就是数学,计算机可识别的模型也即数学模型。
(1) 模型的表示方法
模型表示方法有两种,一种是用方程表示,一种是用实体造型表示。
方程表示主要包括常见的曲线曲面方程,BEZIER曲线曲面,B样条曲线曲面和NURBS曲线曲面。
实体造型表示包括内容挺多,如边界表示,空间划分表示,等等,很多。
总而言之,这一部分的主要任务是以某种形式将一个实体表示出来。
(2) 多边形网格
以某种形式将模型表示出来后,通常在三维图形领域,模型并没有真正的建立起来。通用的模型是多边形网格形式的,于是需要进行转换。
在上一步形成的图形可表示出大量的点,这些点都是实体表面上的点。按照一定的顺序将点连接起来,就得到实体轮廓,即多边形网格。
通常采用三角形网格,为此需要对点进行三角剖分。常采用delaunay三角剖分和随机增量剖分。
(3) 网格简化
形成三角网格后,网格数量如果过多,需要对模型简化,以降低渲染的负荷。在简化的同时还要尽量不降低渲染的效果。通常有静态网格简化技术,细节层次技术,渐进式网格模型表示等。
2、坐标系变换
(1) 观察变换
这一部分是将空间物体从世界坐标系变换到二维视区。因为物体处于三维空间中,然而屏幕是以图片的形式显示的,即视区是二维的,这样就需要这样一个变换。包括如下三个步骤:
观察变换:将实体从世界坐标系变换到观察坐标系。
规范化变换:将观察域规范化
视区变换:完成从观察坐标系到视区的映射。
(2) 裁剪
裁剪是确定图元是否落在某一区域。视区是有限的,在视区外的图元不需要显示在屏幕上。裁剪是在视区变换的过程中执行。
裁剪算法很多,关于直线裁剪,有Cohen-Sutherland算法、Liang-Barsky算法,关于多边形裁剪,有Sutherland-Hodgman算法、Weiler-Atherton算法。
3、渲染
渲染是计算机图形学中最庞大的部分,这部分和计算机、数学、物理等多个学科都有联系。
(1) 光照和明暗处理
这部分研究的是光源发出的光打到实体表面产生的光照效果。于是需要研究如下内容:
光照模型。即光源是什么样的,发出什么样的光。
明暗处理模型。即模型的表面是什么样的,如何反射光。阴影属于此部分
光线追踪。一种计算光照效果的算法。
辐射度算法。另一种计算光照效果的算法。
即,这部分研究的主要内容是:光源发出什么样的光,物体对光如何反射,以及根据光源模型和明暗处理模型而产生的模拟光照效果的算法。
(2) 颜色模型与着色
现实世界是缤纷多彩的,因此必须有多种颜色。颜色模型有多种,如CIE-XYZ色度图,RGB颜色模型,CMY颜色模型,HSV颜色模型,HLS颜色模型等等。
选用某种特定的颜色模型,对实体进行着色,是渲染的重要内容,是增加渲染效果真实性的重要组成部分。
(3) 可见面判定
图形学模拟的是人眼看到的世界。对于一个实体,面对着我们的一侧可以被看到,而实体的背部则不在视线范围内。不在视线范围内的部分称为隐藏面。
可见面判定即确定哪些面可见,哪些面不可见。这里算法也比较多,涉及到Z缓冲器算法,曲面求交算法等等。
(4) 纹理
为实体添加纹理,通常采用贴图的形式,使实体更加真实。
总结:
其实整理的也很乱,因为图形学涉及的东西太多太杂了,比如几何变换,投影等等,都没有写在上面。
下面是三维图形实现流程,我想有了这样一个流程图,心中就有了一条比较清晰的脉络了。
关于渲染过程画的不全,但是比较重要的内容就是这些。写这些也就是梳理一下,想阐述下某种技术在图形学中到底有什么作用,仅此而已。
The End