摘 要:研究在Delphi下采用OpenGL編程顯示錫膏三維形態(tài)的方法,并且實(shí)現(xiàn)旋轉(zhuǎn)、縮放及根據(jù)錫膏厚度顯示不同的顏色等功能。實(shí)驗(yàn)結(jié)果表明:在Delphi7.0平臺(tái)上采用OpenGL編程實(shí)現(xiàn)錫膏三維形態(tài)實(shí)時(shí)動(dòng)態(tài)顯示不僅可以避免大量的矩陣運(yùn)算、減少程序代碼長(zhǎng)度、提高編程效率,而且能夠提高圖形的顯示效果。
關(guān)鍵詞:OpenGL;Delphi;雙緩存技術(shù);錫膏三維模型
中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A
1 引 言
在SMT(Surface Mounted Technology,表面貼裝技術(shù))錫膏檢測(cè)中,對(duì)錫膏印刷質(zhì)量進(jìn)行全面三維測(cè)量,可以準(zhǔn)確地重構(gòu)印刷錫膏的三維形貌,不僅得到準(zhǔn)確的體積信息,還得到錫膏的形狀信息,既提高了測(cè)量精度,又提高了檢測(cè)的準(zhǔn)確性[1]。采用光柵投影相位測(cè)量輪廓術(shù)(Phase Shifting Profilometry,PSP)可以得到大量的錫膏表面上的離散點(diǎn)云數(shù)據(jù),將這些點(diǎn)云數(shù)據(jù)在計(jì)算機(jī)屏幕上三維顯示出來(lái),以供進(jìn)一步對(duì)錫膏印刷質(zhì)量進(jìn)行分析、處理。為了便于對(duì)錫膏的局部細(xì)節(jié)和全體概貌進(jìn)行觀(guān)察,常常需要對(duì)錫膏三維圖進(jìn)行旋轉(zhuǎn)、縮放、平移、著色等處理,如果這些變換全部由程序員自己編寫(xiě)代碼實(shí)現(xiàn),需要用到大量的矩陣運(yùn)算和向量運(yùn)算,不僅費(fèi)時(shí)而且代碼冗長(zhǎng),程序可讀性差。而利用開(kāi)放性圖形庫(kù)(Open Graphic Library,OpenGL)可以很好地解決上述問(wèn)題,并且能夠提高圖形的顯示效果。
OpenGL是一個(gè)性能卓越的三維圖形和交互式視景處理的開(kāi)發(fā)環(huán)境,具有廣泛移植性的應(yīng)用程序編程接口(Application Programming Interface,API),使用某種編程語(yǔ)言(如Pascal)編寫(xiě)函數(shù)時(shí),可以像調(diào)用其它API函數(shù)那樣調(diào)用OpenGL庫(kù)函數(shù)[2]。
2 Delphi下的OpenGL編程
OpenGL是一種圖形與硬件的接口,開(kāi)發(fā)者可以利用OpenGL提供的函數(shù)進(jìn)行三維建模和三維模型的動(dòng)態(tài)顯示[3]。Delphi直接在庫(kù)程序中添加了對(duì)OpenGL的支持(在Delphi目錄的lib目錄下有OpenGL.pas文件,編程的時(shí)候需要在uses語(yǔ)句里加入OpenGL單元),具有與OpenGL的接口,使得開(kāi)發(fā)者可以方便地在Delphi平臺(tái)上采用OpenGL編程開(kāi)發(fā)三維圖形。Delphi下采用OpenGL編程技術(shù)的主要步驟為:OpenGL初始化;圖形顯示視口的控制;繪制、顯示三維圖形;釋放資源。
計(jì)算技術(shù)與自動(dòng)化2011年9月
第30卷第3期馬勇平等:SMT錫膏檢測(cè)中基于Delphi與OpenGL的錫膏三維顯示
2.1 OpenGL初始化
在創(chuàng)建窗體的時(shí)候,需要在窗體的OnCreate事件過(guò)程中初始化OpenGL,目的是為了創(chuàng)建繪制描述表(Rendering Context,RC)和設(shè)備描述表(Device Context,DC)。因?yàn)橥琖indows下用GDI(Graphics Device Interface,圖形設(shè)備接口)繪圖一樣,必須通過(guò)設(shè)備場(chǎng)景調(diào)用相應(yīng)的函數(shù)。OpenGL函數(shù)通過(guò)RC完成三維圖形的繪制,在創(chuàng)建RC時(shí),將它與DC相關(guān)聯(lián)。RC的功能在于將OpenGL命令連接到DC,而DC將窗口連接到GDI,完成OpenGL函數(shù)通過(guò)RC對(duì)應(yīng)的DC將圖形繪制到相應(yīng)的顯示設(shè)備這一過(guò)程。在窗體的OnCreate事件過(guò)程中初始化OpenGL代碼如下: