文獻標識碼: A
文章編號: 0258-7998(2013)02-0042-03
隨著計算機科學的快速發(fā)展,人們對于圖形處理的要求也越來越高,而三維圖形顯示是圖形處理的核心[1]。三維圖形顯示的基礎(chǔ)是圖形變換,即將幾何對象的三維坐標轉(zhuǎn)換到屏幕上所需要進行的一系列坐標變換,包括幾何變換、投影變換、裁剪和視窗變換。投影變換是在世界坐標系中建立的,而計算機屏幕所顯示的圖形是在給定視點和視線方向下的二維屏幕投影[2],所以投影變換是整個圖形處理的關(guān)鍵部分。
投影變換完成圖元由世界空間到相機空間的轉(zhuǎn)換,然后再經(jīng)過映射得到二維屏幕上的圖形。因此,投影變換的效率極大地影響了圖元的轉(zhuǎn)換速度。本文所設(shè)計的硬件結(jié)構(gòu)能加快轉(zhuǎn)換的速度,從而使整個圖形處理流水線的效率也得到提高。
1 圖形處理流水線
圖形處理采用流水線結(jié)構(gòu)實現(xiàn),其命令流程是:首先將每條命令送入命令處理器,然后按照流水線依次流入后續(xù)單元,每個單元按照需求,將相關(guān)命令內(nèi)容存入當前參數(shù)存儲器,每條命令可能在某個單元終止。其處理過程是:當一條命令到達某個單元,如果是本單元要執(zhí)行的操作,則執(zhí)行命令,然后將結(jié)果送入下一單元或者緩存;如果有本級所需的信息,則抽取信息,存入當前狀態(tài)存儲器或者緩存;如果命令在后續(xù)單元還要進行計算,則將命令傳送到下一單元。圖形處理流水線如圖1所示。
本文針對圖形處理流水線結(jié)構(gòu),設(shè)計了其中的投影變換單元。該流水線從命令處理開始,首先從客戶端讀取命令,將頂點進行幾何變換并染色,當有光照的情況下用phong模型染色,圖元生成將經(jīng)過上述變換的頂點裝配成指定的點、線或三角形,通過投影變換將頂點變換到規(guī)范的立方體中;然后剪裁掉位于立方體外的圖形,只顯示立方體內(nèi)的圖形,并且重新裝配剪裁后的圖形;再通過視窗變換把用戶坐標系中的點變換到屏幕坐標系中,計算圖形中的坐標和像素;最后把每個點的顏色和坐標等數(shù)據(jù)送給幀緩存,由幀緩存輸出到屏幕上,得到最終要顯示的圖形。本文將著重介紹投影變換部分。
2 投影變換原理及使用方法
在圖形學中,根據(jù)投影中心與投影平面之間的距離不同,可將投影分為透視投影和正投影。透視投影類似于人對客觀世界的觀察方式,它的特點是距離觀察點近的物體比較大,而距離遠的物體相對比較小;正投影是物體直接映射到屏幕上,它實際上是透視投影的一種特例,即觀察點在無窮遠或者觀察點由一個點變?yōu)橐粋€面[3]。
投影變換就是要確定一個視景體,其作用有兩個:(1)確定物體投影到屏幕的方式,即是透視投影還是正投影;(2)確定從圖像上裁剪掉哪些物體或物體的哪部分。
透視投影的示意圖[4]如圖2所示,其視景體是一個平截頭體,在這個體積內(nèi)的物體投影到錐的頂點,平截頭體外的圖元被裁剪掉[5]。
3.2 投影變換整體框圖
投影變換的整體框圖如圖5所示,其中din、dout為輸入/輸出命令信號,vin、vout為輸入/輸出有效信號,rin、rout為輸入/輸出反饋信號。浮點乘法和加法主要用來完成矩陣與矩陣的運算和矩陣與向量的計算,控制器主要用于控制上下級之間的握手信號,并控制數(shù)據(jù)有序地向浮點運算器發(fā)送。
3.3 控制器的設(shè)計
控制器的設(shè)計可以采用微程序式設(shè)計或硬件連接式設(shè)計,本文采用硬件連接的設(shè)計,同時采用狀態(tài)機來控制。具體的狀態(tài)轉(zhuǎn)移圖如圖6所示。
4 驗證平臺與實驗結(jié)果
4.1 驗證平臺結(jié)構(gòu)
本文基于SystemVerilog語言對投影變換單元構(gòu)建了驗證平臺,通過產(chǎn)生輸入激勵對其功能進行驗證,驗證平臺結(jié)構(gòu)如圖7所示。對于投影變換功能的測試采用固定測試的方法,根據(jù)所列出的測試點編寫對應(yīng)的測試激勵,驗證各種圖元經(jīng)過投影變換之后結(jié)果是否正確。
輸入激勵分為透視投影的測試、平行投影的測試和其他透傳類命令的測試,其目的是產(chǎn)生待測數(shù)據(jù)。這里,待測設(shè)計指本設(shè)計的硬件電路。采用自動化比較機制,實現(xiàn)硬件電路和行為模型的聯(lián)合仿真。將輸出結(jié)果進行對比,如果兩者的結(jié)果相同,則表示功能正確;否則,報錯。
4.2 仿真結(jié)果
本設(shè)計采用Verilog語言實現(xiàn)投影變換的功能,通過ModelSim 6.5進行仿真,以驗證功能的正確性,仿真結(jié)果如圖8所示。首先輸入glLoadIdentity命令,把當前矩陣變?yōu)閱挝痪仃?;然后輸入一個投影矩陣,將單位矩陣與該矩陣相乘得到新的當前矩陣;最后輸入一組頂點向量,經(jīng)過計算得到新的頂點向量并將其輸出到下一級。通過仿真波形可知,電路能夠?qū)崿F(xiàn)投影變換的功能。
4.3 綜合結(jié)果
使用Xilinx的ISE綜合工具進行邏輯綜合,選用xc6vlx550t的開發(fā)板,綜合的最大時鐘頻率可以達到250 MHz,而參考文獻[6]中的工作頻率只能達到101 MHz,且其計算精度也比較低。因此,采用硬件設(shè)計可以極大地提高運算速度和精度。
本文通過對圖形處理流水線的介紹,提出了投影變換的硬件實現(xiàn)方法,詳細描述了電路的內(nèi)部模塊,并對電路進行了功能仿真和行為建模驗證,從而使電路更加準確。通過對圖形處理流水線中投影變換模塊的設(shè)計實現(xiàn),為以后圖形處理的研究工作提供了有力的依據(jù)。
參考文獻
[1] MOLLER T A,HAINCS E,HOFFMAN N.Real-time rendering,3rd edition[M].A.K.Peters,Wellesley,MA,2008.
[2] 陳超.用OpenGL生成三維投影模型的研究[J].電子商務(wù),2011(11):68-69.
[3] 梁柳青.OpenGL中的投影變換[J].天津成人高等學校聯(lián)合學報,2000,2(3):50-54.
[4] 黃章進.高級計算機圖形學[Z].中國科學技術(shù)大學計算機學院,2008.
[5] SHREINER D,the Khronos OpenGL ARB Working Group. OpenGL programming guide[M].Seventh Edition.北京:機械工業(yè)出版社,2010.
[6] 林炎光,孫紅勝,王志民.基于FPGA的透視投影變換算法的設(shè)計與實現(xiàn)[J].電子技術(shù)應(yīng)用,2009,35(5):47-51.