摘 要: 在數(shù)控加工仿真真實(shí)感圖形顯示中,通用的消隱算法用起來(lái),效率相對(duì)較低,難以達(dá)到實(shí)時(shí)動(dòng)態(tài)真實(shí)感圖形顯示的要求。專用的消隱算法有的計(jì)算仍然比較復(fù)雜,難以在微機(jī)上滿足實(shí)時(shí)真實(shí)感圖形顯示的需要。作者在總結(jié)前人研究成果的基礎(chǔ)上,充分運(yùn)用了OpenGL的顯示機(jī)制,提出了一種快速局部消隱算法,該算法不僅速度快,而且非常穩(wěn)定,可以在微機(jī)上顯示高質(zhì)量的真實(shí)感圖形。
關(guān)鍵詞: 真實(shí)感圖形 消隱算法 顯示機(jī)制 局部
1.前言
實(shí)時(shí)動(dòng)態(tài)仿真需要很快的顯示速度。消隱計(jì)算所耗費(fèi)的時(shí)間,在顯示真實(shí)感圖形過(guò)程中占有相當(dāng)大的比重。消隱問(wèn)題又是計(jì)算機(jī)圖形學(xué)中一個(gè)十分重要的內(nèi)容,至今仍然在不斷研究和完善之中。提出的消隱算法很多,如畫(huà)家算法,Z緩存算法,掃描線算法,等等[1],但是這些消隱算法往往非常復(fù)雜。為特殊的應(yīng)用,人們也常常開(kāi)發(fā)一些具有針對(duì)性的專用消隱算法[2],[3]。我們研究了數(shù)控仿真的圖形顯示的特性,發(fā)現(xiàn)通用的消隱算法用起來(lái),效率相對(duì)較低,難以達(dá)到實(shí)時(shí)動(dòng)態(tài)真實(shí)感圖形顯示的要求。本文根據(jù)數(shù)控仿真的消隱和圖形顯示的特點(diǎn),充分利用圖形顯示中的緩存技術(shù)[4],提出一種用于數(shù)控仿真的快速消隱算法。
2.通用的消隱算法
生成真實(shí)感圖形,消隱是必須解決的問(wèn)題之一。因此消隱是計(jì)算機(jī)圖形學(xué)的重要研究?jī)?nèi)容之一。至今提出了非常多的消隱算法如:深度緩存算法又稱Z緩存算法、掃描線算法、多邊形區(qū)域排序算法、畫(huà)家算法,等等。這些算法各有優(yōu)缺點(diǎn),因OpenGL采用的是深度緩存算法,所有這里著重介紹深度緩存算法。如圖1,在屏幕坐標(biāo)系中,Z軸的方向?yàn)橛^察方向。屏幕上任意一像素點(diǎn)(i,j)作平行于Z軸的射線R,與物體表面上的多邊形相交于pl點(diǎn)和p2點(diǎn)。pl和p2為多邊形屏幕上對(duì)應(yīng)像素(i,j)的點(diǎn),pl和p2的Z值稱為該點(diǎn)的深度值。
圖1 深度緩存消隱
深度緩存法比較pl和p2的Z值,將最小的Z值存入深度緩存,最小的Z值所對(duì)應(yīng)的多邊形顏色存入顯示器的顏色緩存。其算法步驟如下:
初時(shí)化深度緩存ZB和顏色緩存FB,使ZB(i,j)=機(jī)器最大值,F(xiàn)B(i,j)=背景顏色,F(xiàn)OR j=1,n,F(xiàn)OR k=1,m,令Zi j=機(jī)器最大值,判斷點(diǎn)(i,j)是否在多邊形P在XOY面上的投影多邊形內(nèi);若是,則計(jì)算多邊形P在點(diǎn)(i,j)處的深度數(shù)值Zij;比較Zij與ZB(i,j)的大小,若Zij
3.OpenGL的模板緩存和深度緩存
屏幕是由象素的矩形陣列所組成,每個(gè)象素在圖像中顯示一個(gè)小方格的顏色。全部象素的存儲(chǔ)器稱為緩存(buffer)。存儲(chǔ)每個(gè)象素的顯示顏色的緩存稱為顏色緩存??臻g幾何元素通過(guò)一系列的變換在屏幕上顯示出來(lái),屏幕上一個(gè)象素對(duì)應(yīng)空間幾何元素上被顯示的點(diǎn)。存儲(chǔ)象素對(duì)應(yīng)空間幾何元素上被顯示的點(diǎn)的深度信息的緩存稱為深度緩存。為了更好地控制空間幾何元素的顯示,又增加了模板緩存。
深度緩存存儲(chǔ)每個(gè)象素的深度值。這個(gè)深度值是利用眼睛(觀測(cè)點(diǎn))的距離來(lái)度量的,所以有較大深度緩存數(shù)值的空間點(diǎn)被較小深度緩存數(shù)值的點(diǎn)所覆蓋。在顯示每一個(gè)象素前比較該象素和深度緩存中原先象素的深度值,如果當(dāng)前象素的深度值小于原象素的深度緩存數(shù)值,那么顯示當(dāng)前象素,并且用當(dāng)前象素的深度緩存數(shù)值代替原先象素的深度緩存數(shù)值。這樣深度緩存數(shù)值大的象素不被顯示。
模板緩存是將繪圖局限于屏幕的某些部分。如同我們用卡紙模板來(lái)簡(jiǎn)化和加快噴涂標(biāo)語(yǔ)或圖案一樣。例如,要繪制一個(gè)由內(nèi)向外從行進(jìn)中汽車窗口所看見(jiàn)的變動(dòng)的場(chǎng)景,因?yàn)槠噧?nèi)部沒(méi)有變化,可以利用模板緩存使得顯示的改變僅僅發(fā)生在窗口范圍內(nèi)。這樣可以大大加快顯示的速度。方法是激活模板緩存,并設(shè)置全屏幕模板緩存內(nèi)容為0。一次繪制汽車內(nèi)部圖像并且改變所繪制范圍內(nèi)模板緩存為1,以后每次僅僅顯示汽車外部變化的場(chǎng)景,并且繪圖時(shí)檢查模板緩存內(nèi)容,只有在模板緩存內(nèi)容小于1的范圍才發(fā)生繪圖。
4.快速局部消隱算法
數(shù)控銑削的加工代碼少的有數(shù)百上千行,多的則上萬(wàn)行甚至數(shù)十萬(wàn)行代碼,銑削加工的零件形狀也多種多樣,有些形狀相當(dāng)復(fù)雜。用普通的消隱算法很難達(dá)到仿真顯示所需要的運(yùn)行速度。數(shù)控加工過(guò)程仿真顯示是動(dòng)態(tài)顯示刀具運(yùn)動(dòng)和毛坯的材料去除,每一次切削,顯示圖像僅僅是刀具切削的局部發(fā)生了變化,所以特別適合用局部刷新的方式進(jìn)行真實(shí)感圖形的顯示。本文提出的利用OpenGL顯示緩存、深度緩存和模板緩存機(jī)制的消隱算法是一種適應(yīng)局部刷新顯示要求的快速消隱算法。
具體算法描述如下:1.用模板為0畫(huà)毛坯。2.啟動(dòng)深度緩存檢驗(yàn),畫(huà)刀具運(yùn)動(dòng)包絡(luò)體。設(shè)置顏色緩存的內(nèi)容為不能修改,所畫(huà)刀具運(yùn)動(dòng)包絡(luò)體不顯示,但是模板緩存中相應(yīng)內(nèi)容變?yōu)?。3.關(guān)閉深度緩存檢驗(yàn),啟用模板緩存檢驗(yàn),設(shè)置模板1的范圍內(nèi)可以顯示圖形。4.按有遠(yuǎn)到近的順序,顯示刀具軌跡中每一個(gè)小長(zhǎng)方體的可見(jiàn)部分。5.將全部模板緩存內(nèi)容設(shè)置為0。6.如果還有刀具軌跡顯示需要,返回2,如果沒(méi)有刀具軌跡需要顯示,程序結(jié)束。
這個(gè)消隱算法的主要思路是:在第2步時(shí)激活深度緩存,利用Z緩存消隱算法消除刀具切削刀痕被其他結(jié)構(gòu)遮擋時(shí)的情況。同時(shí)避免將刀具切入毛坯部分的模板緩存改為1,從而出現(xiàn)圖2的錯(cuò)誤消隱結(jié)果。利用第3步關(guān)閉深度緩存檢驗(yàn),啟用模板緩存檢驗(yàn)。第4步在模板緩存容許的范圍內(nèi),按有遠(yuǎn)到近的順序顯示小立方體來(lái)顯示凹陷的刀具切削刀痕。
如圖3所示,執(zhí)行第2步畫(huà)刀具包絡(luò)體,模板緩存改變成1的范圍。因?yàn)轭伾彺娴膬?nèi)容不能更改,所以屏幕上并不顯示如圖6所示的深色的刀具的包絡(luò)體,為了便于說(shuō)明模板緩存內(nèi)容改變的范圍,我們?cè)趫D3上畫(huà)出了深色刀具的包絡(luò)體,用于表示模板緩存改變的范圍。因?yàn)槭羌せ盍松疃染彺?,所以離視點(diǎn)遠(yuǎn)的刀具切入毛坯的部分,其包絡(luò)體范圍的模板緩存不改變。這樣凹陷的刀具切削刀痕中靠近視點(diǎn)的邊緣遮擋的部分不顯示,因此這部分的模板緩存內(nèi)容保持為0。如圖4為所顯示的刀具切削軌跡。圖5是在前景物體遮擋時(shí)畫(huà)刀具包絡(luò)體的情況,因?yàn)槭羌せ钌疃染彺?,所以包絡(luò)體有一部分消隱,相應(yīng)的模板緩存內(nèi)容不改變,保持為0。因此,圖5所顯示的刀具切削軌跡相對(duì)應(yīng)的部分不顯示。用這種方法,避免了一般消隱算法中的大量的求交計(jì)算,提高了顯示速度。
圖2 錯(cuò)誤的消隱結(jié)果
圖3 深色部分模板內(nèi)容為1
圖4 刀具軌跡痕跡
圖5 有遮擋時(shí)的模板內(nèi)容
5.結(jié)語(yǔ)
消隱算法是計(jì)算機(jī)圖形學(xué)的重要研究?jī)?nèi)容之一,至今已提出了很多算法,并且仍然是計(jì)算機(jī)圖形學(xué)的研究熱點(diǎn)之一。本文提出的專用于數(shù)控加工仿真的局部快速消隱算法,不僅速度快、穩(wěn)定,為在微機(jī)上實(shí)時(shí)顯示真實(shí)感圖形提供了前提條件,而且克服了等軸測(cè)投影的消隱算法不能在任意顯示工件加工過(guò)程的缺陷,具有一定的先進(jìn)性。
參考文獻(xiàn):
[1]孫家廣,楊長(zhǎng)貴.計(jì)算機(jī)圖形學(xué).北京:清華大學(xué)出版社,1995,5.
[2]詹梅,劉郁麗,揚(yáng)合.適用于三維有限元網(wǎng)格的逐步消隱法.西北工業(yè)大學(xué)學(xué)報(bào),1998,10:641—664.
[3]焦法成,唐樹(shù)忠,梁錦文,和柏超.智能化二維消隱技術(shù).計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),1996,1:12—17.
[4]Jackie Nelder,Tom Davis,and Mason Woo,,t openGL Programlning Guide”Addison—Wesle