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