论文部分内容阅读
图形质量和绘制速度是三维实时绘制技术的主要矛盾。三维实时绘制的场景常常包含数百万甚至上千万的三角形,而且其几何模型还有越来越复杂的趋势。传统图形流水线完全依赖CPU执行各环节的大量运算,而CPU并不是专门为图形运算设计的。因此,完全利用CPU来实现三维实时绘制是非常困难的。GPU(Graphics Processing Unit)的出现为这一重要问题提供了一条现实的解决途径。近年来,GPU的发展速度已经大大超过了摩尔定律。目前,GPU的浮点运算性能和数据吞吐率已经超过同时代的主流CPU。更重要的是,GPU已经具有了独立的处理核心、内存空间和编程语言,获得了与CPU类似的可编程能力,这一切使得GPU无可争议地成为三维实时绘制的主流计算平台。GPU的出现和发展不但极大地提高了计算机图形处理的速度和质量,而且还极大地促进了计算机图形相关应用领域的快速发展。图形流水线是计算机图形学中最基本、最重要的技术框架。几乎所有的计算机图形研发工作都以这个框架模型为基础。虽然GPU具有非常高的计算速度,但以前在传统图形流水线上实现的算法却并不能直接照搬到GPU图形流水线上来,这是因为GPU与CPU在系统结构上存在本质区别。GPU基于一种流水化的硬件结构和并行化的编程模型,这是GPU在执行图形运算时具有显著高性能的根本原因。因此,传统图形流水线的串行处理模型必须进行适当改造,才能使GPU的并行计算能力和性能优势得到最充分的发挥。本文对传统图形流水线和GPU图形流水线进行了对比分析和研究。我们首先研究了传统图形流水线中最基本的环节,包括三维物体的数据表示,几何变换,光照模型,光栅化、纹理映射和加速算法。在传统图形流水线的研究基础上,对GPU图形流水线的顶点变换器和片元着色器进行了重点研究。给出了实现动画效果和环境映射效果的顶点变换算法;给出了实现距离衰减效果和聚光灯效果的片元着色算法;总结归纳了若干条优化图形程序性能的编程准则。最后以OpenGL和CG语言为工具,给出了两个基于GPU图形流水线的算法实例。算法实例1给出了模拟单波源三维水波的顶点变换算法;算法实例2给出了计算各向异性光照的片元着色算法。算法实例1采用正弦函数作为构造水波网格的基本波函数,利用Uniform参数传入波的振荡因子,在顶点变换器中执行波面网格顶点的位移计算,实现了波面荡漾的效果;算法实例2假定场景中只有一个光源,然后在片元着色器中计算各向异性光照。算法实例2使用一张纹理作为光照值的查找表。查找表中的每一项都是RGBA格式的颜色值。其中,RGB三个分量存储预先计算的漫反射因子,A分量存储镜面反射因子。实例2给出的算法非常适合模拟金属物体的抛光表面。