《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 設(shè)計應(yīng)用 > 一種新的基于OpenGL重繪式物體拾取方法
一種新的基于OpenGL重繪式物體拾取方法
邾繼貴,張國全,唐大林,李艷軍
(天津大學(xué) 精密測試技術(shù)及儀器國家重點(diǎn)實(shí)驗(yàn)室,天津300072)
摘要: 基于OpenGL提出了一種重繪式拾取法,詳細(xì)介紹了拾取方法和具體應(yīng)用。該方法是在原來的繪圖過程中添加一次虛擬繪圖來幫助拾取物體。
關(guān)鍵詞: 圖像處理
Abstract:
Key words :

摘   要: 基于OpenGL提出了一種重繪式拾取法,詳細(xì)介紹了拾取方法和具體應(yīng)用。該方法是在原來的繪圖過程中添加一次虛擬繪圖來幫助拾取物體。
關(guān)鍵詞: OpenGL  拾取  點(diǎn)云

  OpenGL作為一個性能優(yōu)越的圖形應(yīng)用程序設(shè)計界面而廣泛應(yīng)用于科學(xué)計算可視化、CAD/CAM、仿真、虛擬現(xiàn)實(shí)(VR)等領(lǐng)域。其中物體的拾取屬于OpenGL中人機(jī)實(shí)時交互技術(shù)的一部分。它是由操作者通過輸入設(shè)備輸入相應(yīng)信息,來選取屏幕所顯示的物體。
  拾取是計算機(jī)圖形處理系統(tǒng)中的一個重要功能。在許多情況下,不僅要繪制圖形,而且允許操作者能夠通過輸入設(shè)備操縱屏幕上的物體。有時還需要獲取物體的空間坐標(biāo)或圖形數(shù)值,所有這些都要以拾取作為實(shí)現(xiàn)的基礎(chǔ)。在使用OpenGL工具包開發(fā)圖形處理系統(tǒng)時,物體的拾取有多種方法,其中包括OpenGL提供的選擇機(jī)制、射線拾取法(raypicking)等。作者在開發(fā)三維圖形處理系統(tǒng),實(shí)現(xiàn)大量三維點(diǎn)(點(diǎn)云)的框選功能時,發(fā)現(xiàn)OpenGL提供的選擇機(jī)制有其自身的缺陷,而射線拾取法又會涉及到過于復(fù)雜的算法。為此研究出一種易于實(shí)現(xiàn)、適應(yīng)性強(qiáng)的物體拾取方法——重繪式拾取法。
1  拾取方法綜述
1.1 OpenGL選擇機(jī)制
  OpenGL為了解決拾取問題,提供了一種基于名字堆棧和命中記錄的選擇機(jī)制。但是,這種機(jī)制使用限制較多,其拾取最小單位是圖元,而不是空間點(diǎn),且對于數(shù)據(jù)量較大的物體會因?yàn)槊侄褩5囊绯龆鵁o法成功實(shí)現(xiàn)。另外,OpenGL的選擇機(jī)制使用起來比較麻煩,需要在正常模式和選擇模式之間進(jìn)行切換。
1.2 射線拾取法
  射線拾取法是通過獲取鼠標(biāo)在屏幕上的點(diǎn)擊點(diǎn),經(jīng)屏幕坐標(biāo)轉(zhuǎn)換得到投影點(diǎn),以視點(diǎn)為起點(diǎn),經(jīng)投影點(diǎn)構(gòu)造一條垂直指向屏幕的射線。由于所有物體都位于視錐之內(nèi),因而只需判斷這條射線與場景中的哪些物體相交,經(jīng)過選擇即可獲取所需要物體。
  將這種方法應(yīng)用于點(diǎn)云的框選時,則需要將屏幕上的n個點(diǎn)擊點(diǎn)所對應(yīng)的n條射線構(gòu)成一個選擇體。然后,通過算法來對每個點(diǎn)進(jìn)行處理判斷,在選擇體內(nèi)部的點(diǎn)就是所要拾取的點(diǎn)。
這種方法的缺點(diǎn)是,對于復(fù)雜的選擇體,判斷物體是否在選擇體內(nèi)部的算法極其復(fù)雜。從而使整個處理過程耗時巨大,且如此復(fù)雜的算法也會給整個系統(tǒng)的實(shí)現(xiàn)帶來一定難度。
1.3 對象緩沖區(qū)的拾取方法
  對象緩沖區(qū)的拾取方法需要在內(nèi)存中創(chuàng)建對象緩沖區(qū),且需要對內(nèi)存進(jìn)行大量操作,因而降低了效率。而重繪式拾取法則不需進(jìn)行屏幕數(shù)據(jù)的讀取和拷貝。
1.4 重繪式拾取法
  重繪式拾取法避免了前述方法的缺點(diǎn)。其優(yōu)點(diǎn):(1)沒有采用OpenGL選擇機(jī)制。整個拾取過程都在OpenGL的繪圖模式下完成,因此不必要為每個物體命名。同時,避免了在繪圖模式與選擇模式之間的切換。(2)這種方法在框選時,選擇框可以是方形、圓形等各種自定義形狀,并且此方法容易實(shí)現(xiàn),不會涉及到復(fù)雜算法。
2  重繪式拾取法
2.1 基本思路
  重繪式拾取法是在OpenGL繪圖模式下,通過2次繪圖來拾取并顯示物體。第1次繪圖為虛擬繪圖,通過在OpenGL幀緩存中繪制一些輔助圖形來幫助選取物體。這些輔助圖形對于系統(tǒng)使用者是不可見的,因此在確定所選物體之后要將輔助圖形從幀緩存中清除掉才能進(jìn)行第2次繪圖。第2次繪圖為實(shí)際繪圖,所繪圖形為系統(tǒng)使用者看到的真實(shí)圖形。
  這種拾取方法的過程如下:(1)進(jìn)入虛擬繪圖過程,繪制輔助圖形。根據(jù)不同的應(yīng)用,可以使用不同的輔助圖形。(2)從輔助圖形得出相應(yīng)信息,搜索出所要拾取的物體。(3)進(jìn)入真實(shí)繪圖過程,清除輔助圖形,設(shè)置背景顏色,繪制真實(shí)圖形。在不需要拾取物體的時候,不必執(zhí)行虛擬繪圖過程,直接執(zhí)行步驟(3)進(jìn)入真實(shí)繪圖過程即可。
  此種拾取方法與前述的幾種拾取方法也有相通之處。與OpenGL的選擇機(jī)制對比,這種方法雖然沒有進(jìn)入選擇模式建立名字堆棧,但在實(shí)際應(yīng)用中,常會利用不同的顏色值來對物體進(jìn)行區(qū)分,其虛擬繪圖過程相當(dāng)于OpenGL的選擇模式。射線拾取法是通過復(fù)雜的算法來確定物體與選擇體之間的空間位置關(guān)系,從而選取相應(yīng)的物體。而這種重繪式拾取法則將確定空間位置關(guān)系的工作交給了OpenGL,通過輔助圖形和OpenGL提供的函數(shù)來選擇相應(yīng)的物體。
2.2 輔助圖形
  此方法的第一步虛擬繪圖的主要工作就是要繪制輔助圖形。輔助圖形通常是借助顏色來分辨選中的物體和未被選中的物體。如在點(diǎn)云的框選中,可以將選擇區(qū)域涂成白色,將未被選擇的區(qū)域(背景)涂成黑色,白色區(qū)域中的點(diǎn)即是所要選擇的點(diǎn)。整個白色的選擇區(qū)域就是在虛擬繪圖中所要繪制的輔助圖形。
  輔助圖形是整個重繪式拾取法的核心。對不同的拾取要求(如點(diǎn)的框選或者是大物體的點(diǎn)選等),輔助圖形各不相同。輔助圖形的選擇決定了拾取功能實(shí)現(xiàn)的成功與否。
2.3 搜索物體
  此方法的第二步是搜索物體,它需要根據(jù)一些信息來對所有物體進(jìn)行遍歷。目前都是通過顏色信息來確定被選物體。如在點(diǎn)云的框選中,就需要遍歷所有的點(diǎn),其所在位置的顏色就是決定其是否被選中的依據(jù)。
3  應(yīng)  用
  這種重繪式拾取方法在作者自行開發(fā)的圖形處理系統(tǒng)中已經(jīng)得到了應(yīng)用。下面用實(shí)例來介紹這種拾取方法的實(shí)現(xiàn)過程。
  作者的圖形處理系統(tǒng)是根據(jù)大量的三維點(diǎn)(點(diǎn)云)進(jìn)行曲面重構(gòu)。其中點(diǎn)的拾取是必不可少的。重繪式的拾取方法極其適合點(diǎn)云的框選。其具體處理過程如下。
  (1)繪制輔助圖形。此輔助圖形為輸入設(shè)備所提供的選擇框,且選擇框的形狀可任意。選擇框的內(nèi)部填充為白色。
  (2)確定選擇框內(nèi)部的三維點(diǎn)。通過判斷三維點(diǎn)所在位置的屏幕顏色來判斷此點(diǎn)是否為被選點(diǎn)。被選擇的點(diǎn)位于選擇框之內(nèi),其顏色值應(yīng)為選擇框的顏色(白色)。沒被選中的點(diǎn)位于選擇框之外,其顏色值應(yīng)為背景的顏色(黑色)。
  這個過程用到的2個關(guān)鍵OpenGL API函數(shù)是glReadPixels與gluProject。首先,用函數(shù)glReadPixels讀取幀緩存中的象素值。然后用函數(shù)gluProject將所有點(diǎn)的三維坐標(biāo)轉(zhuǎn)換成點(diǎn)在幀緩存中的位移,由這些位移便可以得到每個點(diǎn)在幀緩存中的象素值,從而可以判斷出哪些三維點(diǎn)為選中點(diǎn)。
  注意,函數(shù)glReadPixels只能讀取幀緩存的象素值,捕獲不到顯示窗口外的象素點(diǎn)。因此,當(dāng)選擇框超過當(dāng)前窗口的大小時,則需要將坐標(biāo)系進(jìn)行縮放,使得選擇框能夠在當(dāng)前窗口中全部顯示。此外,繪圖過程中要使用OpenGL的平坦模式,并且要關(guān)閉燈光和顏色抖動,否則將干擾選擇程序進(jìn)行正確的選擇。
  (3)清除輔助圖形,繪制真實(shí)圖形。可使用OpenGL的函數(shù)glClear清空屏幕和深度緩存,從而清除掉白色實(shí)心的選擇體。
  圖1為作者開發(fā)的軟件在框選點(diǎn)之前的截圖。圖2為框選點(diǎn)之后的截圖,圖中有4萬個三維點(diǎn)(有很多重合點(diǎn))。在框選時,拾取速度很快且沒有閃屏和漏選的現(xiàn)象。圖2中白色框?yàn)檫x擇框,圖中的點(diǎn)為選中的點(diǎn)。

4  展  望
  以上所講的只是重繪式拾取法的一個實(shí)例,對于其他的拾取情況,可以采取不同的輔助圖形和篩選方法來拾取物體,甚至可以利用光照、顏色抖動、材質(zhì)等各種OpenGL提供的繪圖環(huán)境來達(dá)到目的。但是這些技術(shù)還需要進(jìn)一步的研究和開發(fā)。
參考文獻(xiàn)
1   Wright R S,Sweet J M.OpenGL超級寶典.北京:人民郵電 出版社,2000
2   Heran D,Baker M P.計算機(jī)圖形學(xué).北京:清華大學(xué)出版社,1998
3   喬林,費(fèi)廣正.OpenGL程序設(shè)計.北京:清華大學(xué)出版社, 2000
4   白燕斌,史惠康.OpenGL三維圖形編程指南.北京:機(jī)械工 業(yè)出版社,1998

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
午夜精品福利一区二区三区av| 久久亚裔精品欧美| 久久国产精品久久w女人spa| 国产精品99久久99久久久二8 | 久久先锋影音av| 久久免费精品视频| 久久乐国产精品| 老司机精品久久| 欧美~级网站不卡| 欧美福利电影网| 欧美国产成人精品| 欧美日本亚洲视频| 欧美日韩视频在线一区二区观看视频| 欧美极品一区二区三区| 欧美精品色一区二区三区| 欧美片第1页综合| 欧美日韩国产123| 欧美午夜一区二区| 国产精品揄拍500视频| 国产日韩欧美自拍| 狠狠色狠狠色综合日日五| 樱花yy私人影院亚洲| 亚洲国产成人精品久久| 亚洲精品国产精品久久清纯直播| 亚洲精品孕妇| 亚洲天堂第二页| 欧美一区日本一区韩国一区| 久久国产精品一区二区| 亚洲欧洲视频在线| 一个色综合av| 午夜精品久久久久99热蜜桃导演| 久久成人18免费网站| 麻豆成人综合网| 欧美日本韩国一区| 国产精品日韩高清| 狠狠色狠色综合曰曰| 亚洲国产精品999| 一本久道久久综合婷婷鲸鱼| 亚洲欧美高清| 亚洲国产女人aaa毛片在线| 日韩午夜免费| 午夜精品国产精品大乳美女| 久久影视精品| 欧美日韩一区二区在线| 国产人成一区二区三区影院| 亚洲大胆美女视频| 亚洲午夜一区二区三区| 亚洲第一偷拍| 亚洲午夜免费视频| 久久久久一区| 欧美日韩国产123区| 国产麻豆日韩欧美久久| 亚洲国产精品成人va在线观看| 一区二区三区三区在线| 久久精品五月婷婷| 亚洲一区二区三区色| 久久亚洲美女| 国产精品久久久91| 在线日韩欧美视频| 亚洲影院在线| 亚洲免费播放| 久久久999精品免费| 欧美伦理91i| 国产视频综合在线| 99国产一区| 亚洲国产日韩在线| 欧美一区二区三区四区在线观看地址 | 欧美日韩精品一二三区| 国产视频精品xxxx| 99精品久久免费看蜜臀剧情介绍| 欧美专区福利在线| 亚洲一区二区三区视频播放| 久久亚洲精品网站| 国产精品一级久久久| 亚洲日本成人在线观看| 欧美亚洲一区二区在线| 国产精品99久久久久久人| 久久躁日日躁aaaaxxxx| 国产精品免费网站| 亚洲精品美女| 亚洲国产一区视频| 久久精品夜夜夜夜久久| 国产精品超碰97尤物18| 亚洲第一精品影视| 欧美一区二区三区另类| 亚洲嫩草精品久久| 欧美日韩免费在线| 亚洲欧洲日本专区| 亚洲电影下载| 久久久精品999| 国产精品一区亚洲| 亚洲无玛一区| 亚洲午夜精品一区二区| 欧美激情一区二区三区在线视频观看| 国产亚洲成人一区| 亚洲在线视频免费观看| 在线视频欧美日韩| 欧美美女喷水视频| 亚洲经典三级| 亚洲人成网站在线观看播放| 久久精品一区中文字幕| 国产精品久久久久免费a∨大胸| 亚洲人成在线影院| 亚洲裸体俱乐部裸体舞表演av| 久久这里有精品视频| 国产一区成人| 欧美亚洲视频| 欧美一区二区高清在线观看| 国产精品久久影院| 亚洲视频狠狠| 亚洲欧美激情四射在线日 | 一区二区三区四区蜜桃| 欧美大片在线观看| 亚洲国产精品久久精品怡红院| 久久精品国产v日韩v亚洲| 久久精品在线观看| 国产日本欧美视频| 亚洲在线一区| 欧美一站二站| 国产午夜一区二区三区| 午夜久久电影网| 欧美有码在线视频| 国产一区二区三区在线观看网站| 欧美亚洲免费高清在线观看| 欧美在线免费| 国内精品视频久久| 亚洲二区免费| 欧美激情麻豆| 99re6热在线精品视频播放速度 | 久久精品亚洲一区二区三区浴池| 国产三级欧美三级| 欧美在线不卡视频| 久久一区中文字幕| 在线观看成人av电影| 亚洲精品免费看| 欧美猛交免费看| 中文精品视频| 久久国产66| 韩国福利一区| 亚洲国产精品尤物yw在线观看| 欧美国产在线电影| 洋洋av久久久久久久一区| 亚洲在线视频一区| 国产精品呻吟| 久久精品91| 欧美激情一二区| 艳妇臀荡乳欲伦亚洲一区| 性欧美1819sex性高清| 国产一区二区三区四区在线观看| 亚洲国产美女| 欧美日韩美女一区二区| 亚洲一区免费视频| 久久三级视频| 亚洲巨乳在线| 香蕉成人久久| 又紧又大又爽精品一区二区| 亚洲伦理在线| 国产精品久久久久一区| 久久精品国产一区二区三区 | 欧美日韩国产三级| 亚洲一区二区三区四区五区午夜| 久久精品国产精品亚洲综合| 亚洲成人资源| 亚洲一区二区综合| 好吊日精品视频| 一本色道久久| 国产日韩欧美精品综合| 亚洲人体1000| 国产精品一区二区a| 亚洲精品1234| 国产精品久久午夜夜伦鲁鲁| 久久都是精品| 欧美日韩人人澡狠狠躁视频| 亚洲欧美亚洲| 欧美激情综合色| 欧美亚洲在线视频| 欧美伦理91| 久久国产黑丝| 欧美性jizz18性欧美| 亚洲国产精品久久人人爱蜜臀| 国产精品国产三级国产专播品爱网 | 亚洲欧洲日韩在线| 欧美一级视频一区二区| 亚洲国产成人av在线| 久久成人精品视频| 日韩一级二级三级| 免费国产自线拍一欧美视频| 亚洲永久视频| 欧美日韩国产综合视频在线观看 | 国产精品日韩| 夜夜嗨av一区二区三区网站四季av| 国产日韩欧美一二三区| 亚洲视频一区二区免费在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲欧美日韩在线播放| 亚洲国产精品成人综合色在线婷婷 | 欧美日韩一区二区三| 91久久精品国产91久久性色tv| 国产精品嫩草影院av蜜臀| 亚洲精品韩国|