前言:寻找写作灵感?中文期刊网用心挑选的嵌入式图形加速器几何阶段研究,希望能为您的阅读和创作带来灵感,欢迎大家阅读并分享。
摘要:随着人们对嵌入式设备的图形显示能力和响应速度的要求逐渐提高,考虑到计算机对图形处理时计算任务比较繁重,将中央处理器从图形计算中脱离出来逐渐成为了研究趋势,于是在这种背景下图形处理器应运而生。本文从嵌入式图形处理器的发展历史及出现过程出发,重点介绍了在嵌入式系统中图形处理器在几何阶段的分段处理和设计实现。对嵌入式系统中图形处理器的后续研究奠定了简单的基础。
1嵌入式图形处理器的发展历史
在计算机图形学中,会将计算机关于图形处理的任务分为以下三个阶段:应用程序阶段主要完成对应用程序的执行;几何处理阶段主要完成对图形元素的操作;光栅化阶段主要完成对图形元素的组装,根据当前图形元素的参数,然后为每个像素进行渲染着色,以便将图形显示出需要的效果。为了加快CPU的处理速度,使各种应用进程及程序能够流畅快速的得到运行,人们引入了专门用于处理图形数据的图形处理器。第一代的图形处理器硬件上实现了光栅化阶段,此时CPU已经不在对图形进行光栅化阶段处理,而且显示效率明显有了改善,因为此时的图形处理器只实现了光栅化阶段,因此在更多地方会被称为图形加速器。直至出现第四代GPU,此时的图形处理器已经完全具备了图形处理的所有功能,而且在顶点级和像素级的操作上实现了可编程性。
2研究嵌入式图形处理器的意义
随着人机交互的发展,人们对计算机图形显示能力的要求逐渐提高。尤其是近些年嵌入式系统的不断发展,各个领域对嵌入式设备的要求趋势为小型化、多样化、网络化等特点。因此对嵌入式系统能够提供的图形处理能力也提出了新的要求,特别是近些年来智能手机的广泛使用以及各种手游的不断推广。传统的嵌入式系统并没有专门设置图形处理器,因此所有关于图形数据计算和处理的任务均由中央处理器实现。如对于300MHz的嵌入式处理器ARM9为例,按照进行一次32bit×32bit的乘法运算计算,需要6个时钟周期,这其中还不包括对每个顶点的几何变换等其他操作,如果加上的话则需要更多的时钟周期。
3图形处理器的体系结构
为了研究的方便,人们普遍将图形加速器中的几何阶段和光栅化阶段对图形的处理集合到一个叫做图形管线的部件中进行研究,因此图形管线在整个图形处理器体系结构中是最基础的结构,同时也是核心内容。其主要是处理来自中央处理器传递过来的渲染列表,然后最终将像素数据写入帧缓存中。几何阶段根据研究和设计的需要,将几何阶段划分为几何变换、光照、图形元素的装配、图元的剔除裁剪、背面剔除、纹理贴图以及投影七个级别顺序,光栅化阶段也划分为光栅化级别和片段处理两个级别。
4几何阶段的设计与实现
4.1几何变换引擎
图形管线接收到CPU的渲染数据列表首先会被放置于GPU的渲染缓存区中。计算机对于三维现实世界空间内物体的描述均是基于顶点的,因此对某个物体的空间位置变换等操作便可以基于顶点来进行变换。
4.1.1原理
物体在现实空间的位置是任意的,而且也是随意变化的。因此对于显示出来的图形需要经过几何变换才能显示出与实际物体相符的图形。常见的变换有两种:平移变换和旋转变换。
4.1.2设计与实现
这是图形处理器对现实空间中的物体进行的第一次处理,主要任务是将现实空间中的顶点坐标变换为方便进行光照和裁剪的坐标,即变换到裁剪空间。本文设计的几何变换引擎分别有读数据接口和写数据接口,读数据接口主要用于从中央处理器的缓存FIFO中读取图形的渲染列表,而写数据的接口是将处理之后的数据写到下一步处理阶段的缓存FIFO中。引擎的行为是有一个主函数main_action()表示,该函数主要使用宏注册到仿真内核,该函数主要分为四大块,从中央处理器缓存FIFO中读取数据列表,然后进行译码,此时直接调用相应的处理函数即可实现,然后将处理的结果写到下一步光照FIFO中,以便下一个阶段的使用。
4.2光照阶段引擎
人们看到物体的颜色通常情况下会受到光照环境的影响,其实这是物体的材质对光源的颜色进行了调制的缘故,这就是光照阶段需要完成的任务。
4.2.1原理
现实世界中的光照效果是一个复杂的物理过程,当我们使用数字化计算机来模拟连续信号的现实世界的光照效果时,我们无法做到实际上也没有必要完全与现实世界一样。在实际应用中,一个自身不发光的物体在环境中会有三种不同类型光照效果:镜面光、散射光和环境光。现实世界中任何一种光源均是由上述三种光源因为各自不同的强度而混合成的,再加上物体本身的材质对光照的调制变形成了现实中人们所看到的光和物体的颜色。
4.2.2设计与实现
设计光照引擎的目的在于更加真实的反应当物体受到光照时的颜色,因为当物体受到光照时,物体表面呈现出的颜色就会因为受到光照的影响而发生变化。考虑到现实世界中,即使是同一个物体也会表现出受到光照和不受到光照的情况,因此设计光照引擎时引入了一个使能开光来控制是否受到光照,从而控制是否引入光照影响。光照引擎的内部结构及功能为:从几何变换引擎的缓存FIFO中读取渲染数据列表,然后进行译码处理,将得到的结果写到下一流程的FIFO中。与上一流程几何处理阶段缓存FIFO连接的是一个读端口,与下一个流程图元装配连接的是一个写端口。处理过程中会有颜色寄存器、光照使能命令、当前法线寄存器、环境光、散射光、镜面光、材质等累加寄存器。
4.3图元装配引擎
顶点处理之后,下一步需要把顶点组装成图元。计算机图形学中由三种图形元素组成即点、直线和三角形。在三维空间中,点元素是由用于描述现实物体的顶点组成,对于线段图形元素,则是由两个顶点构成,而三角形图形元素是由不在同一条直线上的三个点来组成的。对于现实中常见的折线、线环、以及三角形扇等都可以使用这三种图形元素来构成。前两个引擎的处理主要是顶点级的处理。此阶段的主要任务是将之前独立的顶点以及顶点之间的联系进行组装,本阶段需要完成的另外一个重要任务就是将比较复杂的图元分解成计算机图形学中基本的图形元素。
4.4剔除和裁剪引擎
当图元组装完成以后,下一步需要根据需要对图元进行剔除和裁剪。在现实的三维空间中因为观察者在时间空间和地理空间上看到的物体呈现出的视野是不一样的,即由于视野的限制原因,需要使用视景体来模拟现实中的视野限制。在图形显示的过程中,需要将那些不在视景体内的图形元素删除掉,这个过程便为剔除和裁剪。
4.4.1原理
剔除:把不在视景体内的图形元素从当前处理阶段中删除掉,避免一些不必要的计算,同时也会减轻后续阶段对数据处理的压力。在几何变换阶段把顶点从现实世界中的坐标转换到了计算机能够处理的相机空间中。对于计算机图形学中最基本的图元之一点图元是通过一个测试平面来进行的,如果当前的点没有通过测试的平面,则便会剔除掉,而对于线段来讲,是使用线段的两个端点进行测试的,如果线段的两个端点都没有通过测试,当前的线段便会被剔除掉,对于三角形图元则是分别使用三角形的三个顶点进行测试的。裁剪:裁剪的作用主要是将不在视景体内的部分裁剪掉,它主要是针对线段和三角形的。剔除主要是当线段的两个点或者三角形的三个点都不在视景体时将整个线段或者三角形全部剔除掉。而裁剪主要是针对线段或者三角形一部分在视景体内时,对视景体以外的部分剔除掉,这个过程我们称之为裁剪。
4.4.2设计与实现
本阶段主要是将视景体以外的图元进行删除,只保留视景体以内的部分。首先使用一个读取渲染数据列表的读端口PIPE_READ,然后通过写端口PIPE_WRITE把处理之后的渲染数据列表传送到下一个阶段进行处理。在实现时使用了一个用于存放三角形的三个顶点的数据结构体,设置一个三比特的标志位,用于标志三个顶点能否通过平面的测试;另外设置一个链表结构,存放三角形的顶点数据以及各个三角形前后位置关系。
4.5背面剔除引擎
视镜体外部不需要显示的图形元素经过剔除和裁剪已经被全部删除,但是剩下的图元并不意味着都要显示出来,例如我们在三维空间中观察实体时,背面不需要显示,因此下一步需要将不需要显示的背面进行剔除。
4.6投影引擎
经过背面剔除之后,因为显示设备都是基于二维平面的,因此想要显示出三维空间中的物体还需要将二维图元进行投影。
4.6.1原理
将现实世界中的图元映射到照相机视景体的面上。在计算机图形学中比较常用的投影方法主要有正交投影和透视投影。前者使用的视景体为空间平面六面体,这种投影方式作用之后物体在投影之后的大小不会因为物体和照相机之间的距离收到影响。这种投影方式在CAD中经常使用。透视投影最显著的特点便是缩小或者放大物体的成像。当物体与相机之间的距离越远时,物体呈现出的像就越小,反之便会越大。
4.6.2设计与实现
在设计实现时,同样也使用了一个读端口和一个写端口。从计算机图形学算法角度来看,投影是使用一个投影矩阵与空间坐标相乘,但是考虑到计算机对矩阵乘法运算的计算量,在实现时使用了单独一个函数进行计算。
参考文献
[1]沈潇,石锐.基于可编程图形硬件的实时阴影算法及实现[J],计算机工程与应用,2006,27(19):4071-4073
[2]阙恒,嵌入式图形处理器设计[D],南京航空航天大学,南京,2007
[3]肖云萍,邹庭荣.泛逻辑学中UB代数系统的滤子与商代数[J].计算机工程与应用,2007,43(35):90-92
作者:王利祥 单位:河南护理职业学院