开始学习计算机图像学,作为笔记,记录一下自己的学习过程。首先学习的是计算机图形学中的一些基础知识。首先了解以下观点:
- 形状是准备表达观点的有用工具,需要小心使用。
- 颜色是创建有效图像的重要因素,比其他因素更为重要是,颜色可以向观众展示图像的重要部分,传达需要表达的确切信息。
- 与观众交流信息时,选择自然还是人工的形状和颜色十分重要
- 把颜色与运动结合在一起可表达高达五维的信息,但必须仔细考虑如何将不同信息纳入每个维度表现出来。
- 为了正确理解图像表达的含义,应向观众提供正确的视图和相关的背景知识
- 现代图形API和计算机创建动态图像变得很容易,因此可以利用动作使图像生动丰富
- 不仅可以创建动态图形,还可让观众与图像交互,让他们自己探索问题
- 运动与交互使表示模型行为的方法,必须将其视为交流的重要组成部分
- 在设计图像时必须对观众的文化背景有足够的了解。
计算机图形基本上是三维的,图形系统必须处理三维几何数据。计算机图形系统通过创建三维几何流水线处理这个问题,三维几何流水线就是将三维点转换成二维点的一系列过程。其中三维点是三维几何的基本组成单元。
下图是三维几何流水线的步骤与映射:
场景与视图是计算机图形学的两个基本概念,场景是在图像中显示的三维空间对象组合,包括空间中所有的几何对象和光。视图是用于创建图像的信息集,是包括场景空间,场景坐标系,坐标系中带观察方向的视点,将空间中可视部分映射到二维可视平面的投影操作。
为了创建图像,必须定义表示图像各部分的几何数据。创建并定义几何体的过程称为建模,通常情况下,建模过程是先将每个对象在其有意义的坐标系(即三维模型坐标系)中定义好,然后采用一系列模型变换将对象变换到统一空间坐标系(即三维世界坐标系),在该空间中所有的对象均可见。场景包括三维坐标系中的一系列图形对象,所有图形对象都使用该三维坐标系。这个坐标系称为世界坐标系。视图变换时选择好视点的位置与三维世界空间中的所有对象,重新调整坐标是,将视点调整到适当位置,并以该视点为原点,往适当的方向观察,得到的坐标系未三维眼坐标系。
投影是将三维眼坐标系转化为二维坐标的过程。投影将视域体映射成二维平面上的图形,称为视平面。投影分为平行投影和透视投影。平行投影是指将模型中所有的点通过与Z轴平行的方向投影的X-Y平面,将模型中的所有点从眼空间映射到视平面上。透视投影将光源视为一个点,场景中的每个点沿着这个光源到该带你的视线投影到视平面。同理视域体分为正交视域体和透视视域体,视域体表示的是空间中的可视区域。
裁剪操作时通过致电给对象在视域体之内和视域体之外部分进行的操作。视域体裁剪是将超出可视空间的部分裁剪掉。
正交投影适用于以下情况:
- 需要确认场景中的物体是否排列整齐或大小是否相同,
- 需要测量场景中的物体,
- 需要确认线条是否平行。
透视技影适用于以下情况:
- 使图像看起来比较真实,
- 能在场景中移动并具有与人眼类似的观察效果
- 不需要测量或排列图像中的对象。
二维眼坐标系中的一个点相当于三维眼空间的一整条线。几何流水线的最后一步是在二维眼坐标空间调整对象的坐标, 使其适合二维显示设备的 坐标系。 显示屏幕是一种数字设备, 因此二维眼空间坐标中的实数需要转化成代表屏幕坐标 的整数。 可对坐标值先作比例映射再取整。 这个操作称为窗口到视口映射, 新的坐标空间称为屏幕坐标, 或显示坐标。注意: 整个流水线将几何体用对象顶点表示, 通过多个不同变换从一个表示形式变为另一个表示形式。 这些变换都保证不同表示形式的场景的几何体顶点的一致性, 同时计算机图形学还假设场景的拓扑保持不变。
一些外观属,这些外观属性可以外对象看起来更自然,在顶点转换到二维屏幕坐标后,为屏幕上的每个顶点计算颜色:
- 顶点深度值, 定义为视点参考方向上视点到该顶点的距离,
- 顶点颜色,
- 顶点撞向量,
- 顶点材质,
- 顶点纹理坐标。
颜色:可以由程序员直接定义,如果场景由关照与材质定义,则颜色也可由光找模型计算得到。
纹理:纹理映射是为场景添加视觉效果的是最有用的方法之一,纹理映射可以将图像,比如图像中的视觉内容贴到场景对象上。 通过纹理映射,可使对象表面达到照片的效果,或其他可使,图像更有趣更有真实感的效果。
深度缓存:创建场景时,只要画出与视点最近的对象,这些对象后面的对象会被遮挡,成为不可见。在绘制阶段,只要保存井比较视点与己绘制像素的距离和待绘制像素的距离,就可实现这一目标。 如果待绘制像素到视点距离小于已绘制像素,则用新像素的颜色覆盖原来的颜色;反之,保持原来的像素颜色,这就是深度缓存操作。
图形系统处理场景直到最后向用户显示过程中所完成的全部几何操作过程。 上图中,若忽略裁剪和窗口到视口映射过程,我们可以看到,从定义基本几何模型开始,应用了模型变化,视图变化,最后在屏幕坐标系应用投影变化。可用组合函数表示:
projection(viewing(modeling(geometry)))
或者
projection*(viewing *(modeling *(geometry))) = (projection * viewing * modeling)(geometry)