文献标识码: A
文章编号: 0258-7998(2013)02-0042-03
随着计算机科学的快速发展,人们对于图形处理的要求也越来越高,而三维图形显示是图形处理的核心[1]。三维图形显示的基础是图形变换,即将几何对象的三维坐标转换到屏幕上所需要进行的一系列坐标变换,包括几何变换、投影变换、裁剪和视窗变换。投影变换是在世界坐标系中建立的,而计算机屏幕所显示的图形是在给定视点和视线方向下的二维屏幕投影[2],所以投影变换是整个图形处理的关键部分。
投影变换完成图元由世界空间到相机空间的转换,然后再经过映射得到二维屏幕上的图形。因此,投影变换的效率极大地影响了图元的转换速度。本文所设计的硬件结构能加快转换的速度,从而使整个图形处理流水线的效率也得到提高。
1 图形处理流水线
图形处理采用流水线结构实现,其命令流程是:首先将每条命令送入命令处理器,然后按照流水线依次流入后续单元,每个单元按照需求,将相关命令内容存入当前参数存储器,每条命令可能在某个单元终止。其处理过程是:当一条命令到达某个单元,如果是本单元要执行的操作,则执行命令,然后将结果送入下一单元或者缓存;如果有本级所需的信息,则抽取信息,存入当前状态存储器或者缓存;如果命令在后续单元还要进行计算,则将命令传送到下一单元。图形处理流水线如图1所示。
本文针对图形处理流水线结构,设计了其中的投影变换单元。该流水线从命令处理开始,首先从客户端读取命令,将顶点进行几何变换并染色,当有光照的情况下用phong模型染色,图元生成将经过上述变换的顶点装配成指定的点、线或三角形,通过投影变换将顶点变换到规范的立方体中;然后剪裁掉位于立方体外的图形,只显示立方体内的图形,并且重新装配剪裁后的图形;再通过视窗变换把用户坐标系中的点变换到屏幕坐标系中,计算图形中的坐标和像素;最后把每个点的颜色和坐标等数据送给帧缓存,由帧缓存输出到屏幕上,得到最终要显示的图形。本文将着重介绍投影变换部分。
2 投影变换原理及使用方法
在图形学中,根据投影中心与投影平面之间的距离不同,可将投影分为透视投影和正投影。透视投影类似于人对客观世界的观察方式,它的特点是距离观察点近的物体比较大,而距离远的物体相对比较小;正投影是物体直接映射到屏幕上,它实际上是透视投影的一种特例,即观察点在无穷远或者观察点由一个点变为一个面[3]。
投影变换就是要确定一个视景体,其作用有两个:(1)确定物体投影到屏幕的方式,即是透视投影还是正投影;(2)确定从图像上裁剪掉哪些物体或物体的哪部分。
透视投影的示意图[4]如图2所示,其视景体是一个平截头体,在这个体积内的物体投影到锥的顶点,平截头体外的图元被裁剪掉[5]。
3.2 投影变换整体框图
投影变换的整体框图如图5所示,其中din、dout为输入/输出命令信号,vin、vout为输入/输出有效信号,rin、rout为输入/输出反馈信号。浮点乘法和加法主要用来完成矩阵与矩阵的运算和矩阵与向量的计算,控制器主要用于控制上下级之间的握手信号,并控制数据有序地向浮点运算器发送。
3.3 控制器的设计
控制器的设计可以采用微程序式设计或硬件连接式设计,本文采用硬件连接的设计,同时采用状态机来控制。具体的状态转移图如图6所示。
4 验证平台与实验结果
4.1 验证平台结构
本文基于SystemVerilog语言对投影变换单元构建了验证平台,通过产生输入激励对其功能进行验证,验证平台结构如图7所示。对于投影变换功能的测试采用固定测试的方法,根据所列出的测试点编写对应的测试激励,验证各种图元经过投影变换之后结果是否正确。
输入激励分为透视投影的测试、平行投影的测试和其他透传类命令的测试,其目的是产生待测数据。这里,待测设计指本设计的硬件电路。采用自动化比较机制,实现硬件电路和行为模型的联合仿真。将输出结果进行对比,如果两者的结果相同,则表示功能正确;否则,报错。
4.2 仿真结果
本设计采用Verilog语言实现投影变换的功能,通过ModelSim 6.5进行仿真,以验证功能的正确性,仿真结果如图8所示。首先输入glLoadIdentity命令,把当前矩阵变为单位矩阵;然后输入一个投影矩阵,将单位矩阵与该矩阵相乘得到新的当前矩阵;最后输入一组顶点向量,经过计算得到新的顶点向量并将其输出到下一级。通过仿真波形可知,电路能够实现投影变换的功能。
4.3 综合结果
使用Xilinx的ISE综合工具进行逻辑综合,选用xc6vlx550t的开发板,综合的最大时钟频率可以达到250 MHz,而参考文献[6]中的工作频率只能达到101 MHz,且其计算精度也比较低。因此,采用硬件设计可以极大地提高运算速度和精度。
本文通过对图形处理流水线的介绍,提出了投影变换的硬件实现方法,详细描述了电路的内部模块,并对电路进行了功能仿真和行为建模验证,从而使电路更加准确。通过对图形处理流水线中投影变换模块的设计实现,为以后图形处理的研究工作提供了有力的依据。
参考文献
[1] MOLLER T A,HAINCS E,HOFFMAN N.Real-time rendering,3rd edition[M].A.K.Peters,Wellesley,MA,2008.
[2] 陈超.用OpenGL生成三维投影模型的研究[J].电子商务,2011(11):68-69.
[3] 梁柳青.OpenGL中的投影变换[J].天津成人高等学校联合学报,2000,2(3):50-54.
[4] 黄章进.高级计算机图形学[Z].中国科学技术大学计算机学院,2008.
[5] SHREINER D,the Khronos OpenGL ARB Working Group. OpenGL programming guide[M].Seventh Edition.北京:机械工业出版社,2010.
[6] 林炎光,孙红胜,王志民.基于FPGA的透视投影变换算法的设计与实现[J].电子技术应用,2009,35(5):47-51.