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