|
一、计算机图形学的应用
略
二、图形系统
图形系统包含6个主要元素:
输入设备中央处理单元(CPU)图形处理单元(GPU)存储器帧缓存输出设备
2.1、像素和帧缓存
像素:图形元素
光栅:像素阵列
帧缓存:保存像素阵列的储存区域
帧缓存的分辨率:帧缓存中像素的数目
帧缓存的深度(精度):表示每个像素所用的比特数
颜色缓存:帧缓存中用于存储要显示的像素的颜色的缓存
2.2、CPU和GPU
CPU:生成对象的几何图元
GPU:获取由CPU生成的图元(比如线、圆、多边形),并为帧缓存中的像素赋值,以最佳地表示这些图元。帧缓存可以被GPU访问。
光栅化(扫描转换):从几何实体到帧缓存中像素的颜色和位置的转换。
2.3、输出设备
略
2.4、输入设备
略
三、物理图像和合成图像
3.1、对象和观察者
略
3.2、光和图像
光的频率或波长:不同的频率或波长表现为不同的颜色。
点光源:从一个点向所有方向均匀地发射光线,发射出的光线可以是单一频率的,也可以包含多个频率。
3.3、成像模型
略
四、成像系统
4.1、针孔照相机
投影:点(xp, yp, zp)称为点(x, y, z)的投影。
视域(视角):能够在胶片平面上成完整像的最大物体所张的角度。
景深:视域范围内的每个点都会被投影到位于照相机后面的胶片上清晰成像。理想的针孔照相机具有无穷大的景深。
针孔照相机的缺点:
孔太小,一个点光源只能有一条光线通过小孔,所以几乎没有光线进入照相机。照相机的视角不能调节。
对针孔照相机的改进:
用透镜代替小孔 —— 透镜收集的光线比小孔所能通过的光线要多。透镜的孔径越大,所能收集的光线就越多。选择合适焦距的透镜,可以获得任何想要的视角(直到180°)。但是,实际的透镜并不具有无限大的景深。
4.2、人类视觉系统
视杆细胞:低亮度光线的感受器,对颜色不敏感,人类在夜间看东西时就是视杆细胞在起作用。
视锥细胞:颜色的感受器。人类具有三种视锥细胞,所以可以使用三种标准原色来近似我们能感知的所有颜色,而不需要单独处理所有可见光的波长。
五、虚拟照相机模型
虚拟照相机模型:利用计算机生成图像和在光学系统中成像是相似的。
一些基本原理:
对象的确定不依赖于观察者可以像针孔照相机那样,利用简单的几何方法计算图像。但物体的成像相对于物体是倒立的。
可以在透镜前画另一个平面(下图),用于获得正立的图像。
投影平面:移到透镜前面的虚拟成像平面。
裁剪窗口:在虚拟照相机中,可以通过在投影平面内设置一个裁剪矩形来把视角这个限制移到透镜前面。
六、应用程序编程接口
应用程序编程人员只能看到API,因此图形系统的软硬件实现细节都被屏蔽掉了。
6.1、笔式绘图仪
用于显示WebGL输出的HTML5 canvas元素也起源于笔式绘图仪器模型。
笔式绘图仪器不能很好地扩展到三维图形系统,因为要考虑三维物体上的点要表示在二维纸面上的什么位置(投影)。
我们更愿意通过一个API来允许用户直接在问题域中考虑问题,这样用户就不需要在应用程序中进行三角计算,至于投影过程的细节则留给计算机来完成。 更重要的是,API的实现中通过软硬件来实现投影,这比用户在自己的程序中实现投影的效率要高得多。
6.2、三维API
如果遵从虚拟照相机模型,三维API就需要有相应的函数来确定下列4个要素:
对象通常由一组顶点定义,在应用程序中通过设置一个参数来说明这些顶点指定为何种几何实体(图元)。
为了把照相机(观察者)确定下来,必须确定下列4个要素:
位置 —— 通常由投影中心(COP)给出方向 —— 以投影中心为原点设置一个照相机坐标系,接下来就可以分别绕这个坐标系的三个坐标轴旋转照相机。焦距 —— 决定了场景中能够被照相机成像的那部分有多大。胶片平面 —— 胶片平面的方向与透镜的方向无关,可以独立调节
6.3、使用WebGL API绘制一系列图像
略
6.4、建模 - 绘制模式
把场景的建模和图像的生成(场景的绘制)分离开是非常有帮助的。
建模器和绘制器之间的接口可以简单到就是一个文件,这个文件由建模器生成,用来描述要绘制的对象,并且包含只对绘制器很重要的一些附加信息,例如光源、观察者的位置和材质属性等。
使用GPU的标准方法是首先在CPU中生成对象的几何图元,然后把这些几何数据发送到GPU中进行绘制。因此,CPU是建模器,GPU是绘制器。
七、图形绘制系统的体系结构
7.1、显示处理器
略
7.2、流水线体系结构
略
7.3、图形绘制流水线
成像过程的4个主要步骤:
1)顶点处理
①坐标系变换
在虚拟照相机成像模型里,观察的一个主要功能是把对象从其被定义的坐标系下的表示转换到照相机坐标系(观察坐标系)下的表示。
最后把图像传送到输出设备时,都必须转换成在显示器坐标系下的表示。
坐标系的每一次变化都可以用一个矩阵来表示,坐标系的多次变换可以表示为矩阵的相乘或者级联,于是多个矩阵通过相乘就合并为一个矩阵(适合用流水线体系结构实现)。
②投影变换
投影变换也可以被纳入到流水线中。
2)裁剪和图元组装
虚拟照相机的视域是有限的,这是通过裁剪体来体现的。
照相机前面的椎体就是裁剪体。位于裁剪体内部的对象投影后可以成像,而位于裁剪体外部的对象则不会成像。
裁剪体必须针对逐个图元进行,而不是针对逐个顶点。这样,在绘制流水线的这个阶段里,在裁剪执行之前,必须把顶点组装成像线段和多边形这样的图元。
3)光栅化(由图元生成片元)
由裁剪模块得到的图元仍然是用顶点表示的,为了生成帧缓存中的像素还必须做进一步处理。例如,如果三个顶点确定了一个由单色填充的三角形,光栅化模块就必须确定在帧缓存中有哪些像素位于这个三角形内部。
光栅化模块对每个图元输出一组片元。可以把片元看成是携带相关信息的潜在像素,片元所携带的信息包括:
使用这些信息就可以更新帧缓存中对应位置的像素。
4)片元处理
利用光栅化模块生成的片元来更新帧缓存中的像素。
八、可编程流水线
略
九、性能特征
在流水线体系结构中,有两类本质上不同的处理:前端处理和后端处理。
1)几何处理(前端处理)
在流水线的前端是几何处理,通过各种变换:顶点着色、裁剪和图元组装来处理顶点。这样的处理很适合流水线实现,而且一般涉及浮点运算。
现在,大多数几何处理操作被硬件实现,即GPU可以在芯片级执行大多数图形运算。
2)二进制比特位处理(后端处理)
绘制流水线中的处理涉及许多对帧缓存中二进制比特位的直接操作。
为了有效地实现后端处理,需要使用能够快速批量传送二进制位的体系结构。
3)性能衡量
系统的整体性能由绘制流水线能够以多快的速度处理几何实体以及每秒钟可以修改帧缓存中像素的数量来表征。
十、OpenGL版本和WebGL
略- |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|