本發(fā)明涉及電子地圖技術(shù)領(lǐng)域,更具體的說,是涉及一種三維地形點(diǎn)拾取方法及裝置。
背景技術(shù):
交互應(yīng)用是大多數(shù)軟件產(chǎn)品的基本需求,而在三維化產(chǎn)品中,交互應(yīng)用不可避免的需要用到三維拾取技術(shù)。在電子地圖中渲染三維地形是電子地圖的發(fā)展趨勢(shì),現(xiàn)有技術(shù)可以通過數(shù)字地面模型(Digital Terrain Model,DTM)數(shù)據(jù)渲染電子地圖中的三維地形。當(dāng)用戶對(duì)三維地形進(jìn)行移圖或者點(diǎn)擊三維地形中的道路、興趣點(diǎn)(Point of Interest,POI)等操作時(shí),需要快速且準(zhǔn)確地拾取到用戶的操作點(diǎn)在三維地形上對(duì)應(yīng)的三維地形點(diǎn)。
發(fā)明人在實(shí)現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),目前的三維地形點(diǎn)拾取方法存在處理速度和精確度都較低的問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┝艘环N三維地形點(diǎn)拾取方法及裝置,以提高三維地形點(diǎn)的拾取速度和精度。
為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種三維地形點(diǎn)拾取方法,包括:
獲取用戶在三維地形上的操作點(diǎn)的屏幕坐標(biāo);
基于所述屏幕坐標(biāo)確定所述操作點(diǎn)在三維地形的視景體的近剪裁面上的第一投影點(diǎn),以及所述操作點(diǎn)在所述視景體的遠(yuǎn)剪裁面上的第二投影點(diǎn);
基于所述第一投影點(diǎn)和所述第二投影點(diǎn)構(gòu)成的第一線段,在所述三維地形上選取第一柵格,所選取的第一柵格構(gòu)成第一柵格集合,所述第一柵格為最有可能被所述操作點(diǎn)操作的柵格;
計(jì)算所述第一線段與所述第一柵格集合中的第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為所述操作點(diǎn)所拾取到的三維地形點(diǎn)。
一種三維地形點(diǎn)拾取裝置,包括:
獲取模塊,用于獲取用戶在三維地形上的操作點(diǎn)的屏幕坐標(biāo);
第一確定模塊,用于基于所述屏幕坐標(biāo)確定所述操作點(diǎn)在三維地形的視景體的近剪裁面上的第一投影點(diǎn),以及所述操作點(diǎn)在所述視景體的遠(yuǎn)剪裁面上的第二投影點(diǎn);
選取模塊,用于基于所述第一投影點(diǎn)和所述第二投影點(diǎn)構(gòu)成的第一線段,在所述三維地形上選取第一柵格,所選取的第一柵格構(gòu)成第一柵格集合,所述第一柵格為最有可能被所述操作點(diǎn)操作的柵格;
第二確定模塊,用于計(jì)算所述第一線段與所述第一柵格集合中的第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為所述操作點(diǎn)所拾取到的三維地形點(diǎn)。
經(jīng)由上述的技術(shù)方案可知,本發(fā)明實(shí)施例公開的一種三維地形點(diǎn)拾取方法及裝置,獲取用戶操作點(diǎn)在視景體的近剪裁面上的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn);基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段在三維地形上選取第一柵格集合,該第一柵格集合為最有可能被操作點(diǎn)操作的柵格的集合;計(jì)算第一線段與第一柵格集合中第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。由于本發(fā)明實(shí)施例中的第一線段是基于用戶操作點(diǎn)在視景體的近裁剪面和遠(yuǎn)裁剪面上的投影點(diǎn)構(gòu)成的,因此基于第一線段選取的第一柵格集合即為最有可能被操作點(diǎn)操作的柵格的集合,因此通過計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn)來確定操作點(diǎn)所拾取的三維地形點(diǎn)就可以減少計(jì)算量,目的性強(qiáng),從而提高了三維地形點(diǎn)的拾取速度和精度。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的三維地形點(diǎn)拾取方法的一種實(shí)現(xiàn)流程圖;
圖2a為本發(fā)明實(shí)施例提供的投影變換所涉及的投影模型;
圖2b為本發(fā)明實(shí)施例提供的圖2a所示投影模型進(jìn)行視口變換的反變換、投影變換的反變換、視圖變換的反變換和模型變換的反變換后的示意圖;
圖3為本發(fā)明實(shí)施例提供的計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)的一種實(shí)現(xiàn)流程圖;
圖4為本發(fā)明實(shí)施例提供的基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段在三維地形上選取第一柵格的一種實(shí)現(xiàn)流程圖
圖5為本發(fā)明實(shí)施例提供的第一線段以及三維地形在海平面上的投影的示例圖;
圖6為本發(fā)明實(shí)施例提供的投影線段經(jīng)過海平面上的柵格的一種示例圖;
圖7為本發(fā)明實(shí)施例提供的三維地形點(diǎn)拾取裝置的一種結(jié)構(gòu)示意圖;
圖8為本發(fā)明實(shí)施例提供的第二確定模塊的一種結(jié)構(gòu)示意圖;
圖9為本發(fā)明實(shí)施例提供的選取模塊的一種結(jié)構(gòu)示意圖;
圖10為本發(fā)明實(shí)施例提供的第一確定模塊的一種結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例公開的三維地形點(diǎn)拾取方法的一種實(shí)現(xiàn)流程如圖1所示,可以包括:
步驟S11:獲取用戶在三維地形上的操作點(diǎn)的屏幕坐標(biāo);
用戶的操作點(diǎn)可以是用戶通過鼠標(biāo)進(jìn)行點(diǎn)擊時(shí)的鼠標(biāo)點(diǎn)擊點(diǎn),也可以是用戶通過操做體(如手指、觸控筆等)在觸摸屏上點(diǎn)擊時(shí)的觸控點(diǎn)。
在電子地圖進(jìn)行顯示時(shí),通常根據(jù)所需要顯示的區(qū)域獲取該區(qū)域的若干地圖瓦片的三維地形。電子地圖在顯示時(shí),顯示的是渲染后的三維地形。用 戶在對(duì)電子地圖進(jìn)行操作時(shí),操作點(diǎn)是對(duì)顯示區(qū)域內(nèi)的某個(gè)地圖瓦片的三維地形進(jìn)行操作。
在對(duì)三維地形進(jìn)行渲染時(shí),渲染的過程就是模擬人眼或攝像機(jī)成像的過程。較常用的渲染方法是:對(duì)三維地形依次進(jìn)行模型變換,視圖變換,投影變換(也稱為透視變換)和視口變換,對(duì)變換后的數(shù)字地圖模型進(jìn)行渲染,其中,后一個(gè)變換是在前一個(gè)變換的基礎(chǔ)上進(jìn)行。
其中,在進(jìn)行投影變換時(shí),會(huì)基于如圖2a所示的投影模型,其中,在近剪裁面和遠(yuǎn)剪裁面之間的區(qū)域?yàn)橐朁c(diǎn)的可視區(qū)域(即視景體)。即在圖2a所示的視點(diǎn)位置可以看到近剪裁面和遠(yuǎn)剪裁面之間的區(qū)域內(nèi)的場(chǎng)景(即三維地形所展現(xiàn)的場(chǎng)景)。
步驟S12:基于操作點(diǎn)的屏幕坐標(biāo)確定操作點(diǎn)在三維地形的視景體的近剪裁面上的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn);
可選的,可以對(duì)操作點(diǎn)的屏幕坐標(biāo)依次進(jìn)行視口變換的反變換、投影變換的反變換、視圖變換的反變換和模型變換的反變換,其中,后一個(gè)變換是在前一個(gè)變換的基礎(chǔ)上進(jìn)行;
依據(jù)進(jìn)行模型變換的反變換后得到的點(diǎn)擊射線確定屏幕坐標(biāo)在視景體的近剪裁面的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn)。
在進(jìn)行模型變換的反變換后,可以得到與操作點(diǎn)對(duì)應(yīng)的點(diǎn)擊射線,該點(diǎn)擊射線與進(jìn)行模型變換的反變換后的視景體近剪裁面的交點(diǎn)即為第一投影點(diǎn),該點(diǎn)擊射線與進(jìn)行模型變換的反變換后的視景體遠(yuǎn)剪裁面的交點(diǎn)即為第二投影點(diǎn)??蓞⒁妶D2b,圖2b為圖2a所示投影模型進(jìn)行視口變換的反變換、投影變換的反變換、視圖變換的反變換和模型變換的反變換后的示意圖。
步驟S13:基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,在三維地形上選取第一柵格,所選取的第一柵格構(gòu)成第一柵格集合,第一柵格為最有可能被操作點(diǎn)操作的柵格;
本發(fā)明實(shí)施例中,基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段在三維地形中選擇最有可能被操作點(diǎn)操作的柵格。
步驟S14:計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn),將計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。
第一線段可能與第一柵格集合中的多個(gè)第一柵格有交點(diǎn),本發(fā)明實(shí)施例中,所計(jì)算得到的交點(diǎn)為多個(gè)可能的交點(diǎn)中的其中一個(gè)。
在確定操作點(diǎn)所拾取的三維地形點(diǎn)時(shí),只計(jì)算第一線段與所選擇的柵格的交點(diǎn),不僅計(jì)算量少,而且更有目的性,因而能夠提高計(jì)算速度和精度。
本發(fā)明實(shí)施例提供的三維地形點(diǎn)拾取方法,獲取用戶操作點(diǎn)在視景體的近剪裁面上的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn);基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段在三維地形上選取第一柵格集合,該第一柵格集合為最有可能被操作點(diǎn)操作的柵格的集合;計(jì)算第一線段與第一柵格集合中第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。也就是說,本發(fā)明實(shí)施例基于用戶操作點(diǎn)在視景體的近裁剪面和遠(yuǎn)裁剪面上的投影點(diǎn)構(gòu)成的第一線段選取最有可能被操作點(diǎn)操作的柵格的集合,只計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn)來確定操作點(diǎn)所拾取的三維地形點(diǎn),計(jì)算量少,目的性強(qiáng),從而提高了三維地形點(diǎn)的拾取速度和精度。
可選的,本發(fā)明實(shí)施例提供的計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)的一種實(shí)現(xiàn)流程圖如圖3所示,可以包括:
步驟S31:按第一柵格集合中第一柵格的排列順序,順序計(jì)算所第一線段與第一柵格的交點(diǎn);
本發(fā)明實(shí)施例中,第一柵格集合中的第一柵格是按照預(yù)定的順序排列的。在計(jì)算第一線段與第一柵格的交點(diǎn)時(shí),按照第一柵格的排列順序,依次計(jì)算第一線段與各個(gè)第一柵格的交點(diǎn)。
步驟S32:將計(jì)算得到的第一個(gè)交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。
本發(fā)明實(shí)施例中,第一柵格按照預(yù)定的順序排列,從而將計(jì)算得到的第一交點(diǎn)確定為操作點(diǎn)所拾取的三維地形點(diǎn)。
在計(jì)算得到第一個(gè)交點(diǎn)后,停止計(jì)算,即便還有未與第一線段進(jìn)行計(jì)算的第一柵格,也不再計(jì)算,以節(jié)約計(jì)算資源。
第一線段也有可能與第一柵格集合中的任意一個(gè)第一柵格都沒有交點(diǎn),說明操作點(diǎn)未拾取到三維地形點(diǎn)。
另外,若第一柵格集合為空集,也說明操作點(diǎn)未拾取到三維地形點(diǎn)。
可選的,本發(fā)明實(shí)施例提供的基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,在三維地形上選取第一柵格的一種實(shí)現(xiàn)流程圖如圖4所示,可以包括:
步驟S41:將第一線段與三維地形投影到海平面上,得到投影線段和三維地形投影;
由于三維地形是用柵格數(shù)據(jù)表示的,即,三維地形本身是柵格結(jié)構(gòu),因此,將三維地形投影到海平面上后,所得到的三維地形的投影也為柵格。而第一線段在海平面上投影也為一線段(為方便敘述,記為投影線段)。為方便描述,將第一投影點(diǎn)記為點(diǎn)A,第二投影點(diǎn)記為點(diǎn)B,第一投影點(diǎn)A在海平面上的投影記為點(diǎn)C,第二投影點(diǎn)B在海平面上的投影記為點(diǎn)D,則,第一線段AB在海平面上的投影線段為CD。具體第一線段AB以及三維地形在海平面上的投影的示例圖如圖5所示。
步驟S42:獲取投影線段在三維地形投影上所經(jīng)過的第二柵格,所獲取的第二柵格構(gòu)成第二柵格集合;
步驟S43:在三維地形上選取與第二柵格對(duì)應(yīng)第一柵格。
第二柵格是三維地形上的某個(gè)柵格在海平面上的投影,通過投影關(guān)系,可以在三維地形上確定與第二柵格對(duì)應(yīng)的第一柵格。也就是說,第一柵格集合中的柵格映射到海平面上,就是第二柵格集合。
可選的,在三維地形上選取與第二柵格對(duì)應(yīng)的第一柵格,選取的第一柵格構(gòu)成第一柵格集合的具體實(shí)現(xiàn)方式可以包括:
按照第二柵格集合中第二柵格的排列順序,在三維地形上選取與第二柵格對(duì)應(yīng)的第一柵格,第一柵格按照選取的先后順序構(gòu)成第一柵格集合,先選取的排序在先,后選取的排序在后。
本發(fā)明實(shí)施例中,第二柵格集合中的第二柵格也是按照預(yù)定順序排列的,在三維地形上選取與第二柵格對(duì)應(yīng)的第一柵格集合時(shí),按照第二柵格中的排序順序依次選取與每個(gè)第二柵格對(duì)應(yīng)的第一柵格集合。因此,第一柵格集合 中位于第一排列位置的第一柵格投影到海平面上,得到投影柵格即為第二柵格集合中位于第一排列位置的第二柵格。
可選的,第二柵格集合中的第二柵格可以按照投影線段從起點(diǎn)到終點(diǎn)的方向在三維地形投影上的經(jīng)過順序排序,先經(jīng)過的排序在先,后經(jīng)過的排序在后;
其中,投影線段的起點(diǎn)是第一投影點(diǎn)在海平面上的投影點(diǎn),投影線段的終點(diǎn)是第二投影點(diǎn)在海平面上的投影點(diǎn)。
可選的,獲取投影線段在三維地形投影上經(jīng)過的第二柵格的一種實(shí)現(xiàn)方式具體可以包括:
沿投影線段的起點(diǎn)到終點(diǎn)的方向,順序獲取投影線段在三維地形投影上經(jīng)過的第二柵格,第二柵格按照獲取的先后順序構(gòu)成第二柵格集合,先獲取的排序在先,后獲取的排序在后;
其中,投影線段的起點(diǎn)是第一投影點(diǎn)在海平面上的投影點(diǎn),投影線段的終點(diǎn)是第二投影點(diǎn)在海平面上的投影點(diǎn)。
本發(fā)明實(shí)施例中,第二柵格集合中的柵格是投影線段在三維地形投影上經(jīng)過的柵格的集合,且第二柵格中的第二柵格按照投影線段從起點(diǎn)到終點(diǎn)的方向經(jīng)過的順序排列。
假設(shè)投影線段CD在海平面上經(jīng)過的所有柵格如圖6所示,圖6為本發(fā)明實(shí)施例提供的投影線段CD經(jīng)過海平面上的柵格的一種示例圖。圖6中,投影線段CD共經(jīng)過6個(gè)柵格,即第二柵格集合包括3-8號(hào)柵格,對(duì)第二柵格集合中的所有柵格進(jìn)行排序的方式為:按照從C點(diǎn)開始,線段CD上向D點(diǎn)的方向依次經(jīng)過柵格的順序?qū)Φ诙鸥窦现械乃袞鸥襁M(jìn)行排序。基于此,本發(fā)明實(shí)施例中,圖6所示示例中第二柵格集合中柵格的排序依次為:5、6、7、8、3、4。而不是3、4、5、6、7、8,或其它順序。
還以圖6所示示例為例,假設(shè)三維地形中與海平面上的3號(hào)柵格對(duì)應(yīng)的柵格為a柵格,三維地形中與海平面上的4號(hào)柵格對(duì)應(yīng)的柵格為b柵格,三維地形中與海平面上的5號(hào)柵格對(duì)應(yīng)的柵格為c柵格,三維地形中與海平面上的6號(hào)柵格對(duì)應(yīng)的柵格為d柵格,三維地形中與海平面上的7號(hào)柵格對(duì)應(yīng)的柵格為e柵格,三維地形中與海平面上的8號(hào)柵格對(duì)應(yīng)的柵格為f柵格,則 第一柵格集合中包含的柵格分別為:a柵格,b柵格,c柵格,d柵格,e柵格,f柵格。
第一柵格集合中柵格的排列順序是:c柵格,d柵格,e柵格,f柵格,a柵格,b柵格。
當(dāng)計(jì)算第一投影點(diǎn)A和第二投影點(diǎn)B構(gòu)成的線段AB與第一柵格集合中第一柵格的交點(diǎn)時(shí),先計(jì)算線段AB與c柵格的交點(diǎn),再計(jì)算線段AB與d柵格的交點(diǎn),然后計(jì)算線段AB與e柵格的交點(diǎn),之后計(jì)算線段AB與f柵格的交點(diǎn),之后計(jì)算線段AB與a柵格的交點(diǎn),之后計(jì)算線段AB與b柵格的交點(diǎn)。
在計(jì)算過程中,若計(jì)算到線段AB與第一柵格集合中某個(gè)柵格存在交點(diǎn)則不再計(jì)算線段AB與第一柵格集合中后續(xù)柵格的交點(diǎn)。例如,若計(jì)算出線段AB與c柵格的交點(diǎn),則確定線段AB與c柵格的交點(diǎn)為操作點(diǎn)所拾取的三維地形點(diǎn),不再計(jì)算線段AB與第一柵格集合中其它柵格的交點(diǎn)。若線段AB與c柵格沒有交點(diǎn),則計(jì)算線段AB與d柵格的交點(diǎn),若計(jì)算出線段AB與d柵格的交點(diǎn),則確定線段AB與d柵格的交點(diǎn)為操作點(diǎn)所拾取的三維地形點(diǎn),不再計(jì)算線段AB與第一柵格集合中其它柵格的交點(diǎn),若線段AB與d柵格沒有交點(diǎn),則計(jì)算線段AB與e柵格的交點(diǎn)……,依此類推,直至計(jì)算出線段AB與第一柵格集合中的柵格的第一個(gè)交點(diǎn),或者,線段AB與第一柵格集合中的所有柵格都沒有交點(diǎn)。
可選的,將第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,以及三維地形投影到海平面上的一種實(shí)現(xiàn)方式可以包括:
將第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,以及三維地形以垂直于海平面的方式投影到海平面上。
本發(fā)明實(shí)施例中,為了方便計(jì)算,將第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,以及三維地形均以垂直于海平面的方式投影到海平面上。也就是說,投影線以垂直于海平面的方式將第一線段和三維地形投影到海平面上。
與方法實(shí)施例相對(duì)應(yīng),本發(fā)明實(shí)施例還提供一種三維地形點(diǎn)拾取裝置,本發(fā)明實(shí)施例提供的三維地形點(diǎn)拾取裝置的一種結(jié)構(gòu)示意圖如圖7所示,可以包括:
獲取模塊71,第一確定模塊72,選取模塊73和第二確定模塊74;其中,
獲取模塊71用于獲取用戶在三維地形上的操作點(diǎn)的屏幕坐標(biāo);
用戶的操作點(diǎn)可以是用戶通過鼠標(biāo)進(jìn)行點(diǎn)擊時(shí)的鼠標(biāo)點(diǎn)擊點(diǎn),也可以是用戶通過操做體(如手指、觸控筆等)在觸摸屏上點(diǎn)擊時(shí)的觸控點(diǎn)。
在電子地圖進(jìn)行顯示時(shí),通常根據(jù)所需要顯示的區(qū)域獲取該區(qū)域的若干地圖瓦片的三維地形。電子地圖在顯示時(shí),顯示的是渲染后的三維地形。用戶在對(duì)電子地圖進(jìn)行操作時(shí),操作點(diǎn)是對(duì)顯示區(qū)域內(nèi)的某個(gè)地圖瓦片的三維地形進(jìn)行操作。
在對(duì)三維地形進(jìn)行渲染時(shí),渲染的過程就是模擬人眼或攝像機(jī)成像的過程。較常用的渲染方法是:對(duì)三維地形依次進(jìn)行模型變換,視圖變換,投影變換(也稱為透視變換)和視口變換,對(duì)變換后的數(shù)字地圖模型進(jìn)行渲染,其中,后一個(gè)變換是在前一個(gè)變換的基礎(chǔ)上進(jìn)行。
其中,在進(jìn)行投影變換時(shí),會(huì)基于如圖2a所示的投影模型,其中,在近剪裁面和遠(yuǎn)剪裁面之間的區(qū)域?yàn)橐朁c(diǎn)的可視區(qū)域(即視景體)。即在圖2a所示的視點(diǎn)位置可以看到近剪裁面和遠(yuǎn)剪裁面之間的區(qū)域內(nèi)的場(chǎng)景(即三維地形所展現(xiàn)的場(chǎng)景)。
第一確定模塊72用于基于屏幕坐標(biāo)確定操作點(diǎn)在三維地形的視景體的近剪裁面上的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn);
可選的,可以對(duì)操作點(diǎn)的屏幕坐標(biāo)依次進(jìn)行視口變換的反變換、投影變換的反變換、視圖變換的反變換和模型變換的反變換,其中,后一反變換是在并一反變換的基礎(chǔ)上進(jìn)行的;
依據(jù)進(jìn)行模型變換的反變換后得到的點(diǎn)擊射線確定屏幕坐標(biāo)在視景體的近剪裁面的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn)。
在進(jìn)行模型變換的反變換后,可以得到與操作點(diǎn)對(duì)應(yīng)的點(diǎn)擊射線,該點(diǎn)擊射線與進(jìn)行模型變換的反變換后的視景體近剪裁面的交點(diǎn)即為第一投影點(diǎn),該點(diǎn)擊射線與進(jìn)行模型變換的反變換后的視景體遠(yuǎn)剪裁面的交點(diǎn)即為第二投影點(diǎn)??蓞⒁妶D2b,圖2b為圖2a所示投影模型進(jìn)行視圖變換的反變換和模型變換的反變換后的示意圖。
選取模塊73用于基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,在三維地形上選取第一柵格,所選取的第一柵格構(gòu)成第一柵格集合,第一柵格為最有可能被操作點(diǎn)操作的柵格的集合;
本發(fā)明實(shí)施例中,基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段在三維地形中選擇最有可能被操作點(diǎn)操作的柵格。
第二確定模塊74用于計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn),將計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。
第一線段可能與第一柵格集合中的多個(gè)第一柵格有交點(diǎn),本發(fā)明實(shí)施例中,所計(jì)算得到的交點(diǎn)為多個(gè)可能的交點(diǎn)中的其中一個(gè)。
在確定操作點(diǎn)所拾取的三維地形點(diǎn)時(shí),只計(jì)算第一線段與所選擇的柵格的交點(diǎn),不僅計(jì)算量少,而且更有目的性,因而能夠提高計(jì)算速度和精度。
本發(fā)明實(shí)施例提供的三維地形點(diǎn)拾取裝置,獲取用戶操作點(diǎn)在視景體的近剪裁面上的第一投影點(diǎn),以及操作點(diǎn)在視景體遠(yuǎn)剪裁面上的第二投影點(diǎn);基于第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段在三維地形上選取第一柵格集合,該第一柵格集合為最有可能被操作點(diǎn)操作的柵格的集合;計(jì)算第一線段與第一柵格集合中第一柵格的交點(diǎn),將所計(jì)算得到的交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。也就是說,本發(fā)明實(shí)施例基于用戶操作點(diǎn)在視景體的近裁剪面和遠(yuǎn)裁剪面上的投影點(diǎn)構(gòu)成的第一線段選取最有可能被操作點(diǎn)操作的柵格的集合,只計(jì)算第一線段與第一柵格集合中的第一柵格的交點(diǎn)來確定操作點(diǎn)所拾取的三維地形點(diǎn),計(jì)算量少,目的性強(qiáng),從而提高了三維地形點(diǎn)的拾取速度和精度。
可選的,本發(fā)明實(shí)施例提供的第二確定模塊74的一種結(jié)構(gòu)示意圖如圖8所示,可以包括:
計(jì)算單元81和第一確定單元82;其中,
計(jì)算單元81用于按第一柵格集合中第一柵格的排列順序,順序計(jì)算第一線段與第一柵格的交點(diǎn);
本發(fā)明實(shí)施例中,第一柵格集合中的第一柵格是按照預(yù)定的順序排列的。在計(jì)算第一線段與第一柵格的交點(diǎn)時(shí),按照第一柵格的排列順序,依次計(jì)算第一線段與各個(gè)第一柵格的交點(diǎn)。
第一確定單元82用于將計(jì)算得到的第一個(gè)交點(diǎn)確定為操作點(diǎn)所拾取到的三維地形點(diǎn)。
本發(fā)明實(shí)施例中,第一柵格按照預(yù)定的順序排列,從而將計(jì)算得到的第一交點(diǎn)確定為操作點(diǎn)所拾取的三維地形點(diǎn)。
在計(jì)算得到第一個(gè)交點(diǎn)后,計(jì)算單元81可以停止計(jì)算,即便還有未與第一線段進(jìn)行計(jì)算的第一柵格,也不再計(jì)算,以節(jié)約計(jì)算資源。
第一線段也有可能與第一柵格集合中的任意一個(gè)第一柵格都沒有交點(diǎn),說明操作點(diǎn)未拾取到三維地形點(diǎn)。
另外,若第一柵格集合為空集,也說明操作點(diǎn)未拾取到三維地形點(diǎn)。
可選的,本發(fā)明實(shí)施例提供的選取模塊73的一種結(jié)構(gòu)示意圖如圖9所示,可以包括:
投影單元91,獲取單元92和選取單元93;其中,
投影單元91用于將第一線段與三維地形投影到海平面上,得到投影線段和三維地形投影;
可選的,由于三維地形是用柵格數(shù)據(jù)表示的,即,三維地形本身是柵格結(jié)構(gòu),因此,將三維地形投影到海平面上后,所得到的三維地形投影也為柵格。而第一線段在海平面上投影也為一線段(為方便敘述,記為投影線段)。為方便描述,將第一投影點(diǎn)記為點(diǎn)A,第二投影點(diǎn)記為點(diǎn)B,第一投影點(diǎn)A在海平面上的投影記為點(diǎn)C,第二投影點(diǎn)B在海平面上的投影記為點(diǎn)D,則,第一線段AB在海平面上的投影線段為CD。具體第一線段AB以及三維地形在海平面上的投影的示例圖如圖5所示。
獲取單元92用于獲取投影線段在三維地形投影上經(jīng)過的第二柵格,所獲取第二柵格構(gòu)成第二柵格集合;
選取單元93用于在所述三維地形上選取與所述第二柵格對(duì)應(yīng)的第一柵格,所選取的第一柵格構(gòu)成第一柵格集合。
第二柵格是三維地形上的某個(gè)柵格在海平面上的投影,通過投影關(guān)系,可以在三維地形上確定與第二柵格對(duì)應(yīng)的第一柵格。也就是說,第一柵格集合中的柵格映射到海平面上,就是第二柵格集合。
可選的,選取單元93具體可以包括:
選擇子單元,用于按照第二柵格集合中第二柵格的排列順序,在三維地形上選取與第二柵格對(duì)應(yīng)的第一柵格,第一柵格按照選取的先后順序構(gòu)成第一柵格集合,先選取的排序在先,后選取的排序在后。
本發(fā)明實(shí)施例中,第二柵格集合中的第二柵格也是按照預(yù)定順序排列的,在三維地形上選取與第二柵格對(duì)應(yīng)的第一柵格集合時(shí),按照第二柵格中的排序順序依次選取與每個(gè)第二柵格對(duì)應(yīng)的第一柵格集合。因此,第一柵格集合中位于第一排列位置的第一柵格投影到海平面上,得到投影柵格即為第二柵格集合中位于第一排列位置的第二柵格。
可選的,第二柵格集合中的第二柵格可以按照投影線段從起點(diǎn)到終點(diǎn)的方向在三維地形投影上的經(jīng)過順序排序,先經(jīng)過的排序在先,后經(jīng)過的排序在后;
其中,投影線段的起點(diǎn)是第一投影點(diǎn)在海平面上的投影點(diǎn),投影線段的終點(diǎn)是第二投影點(diǎn)在海平面上的投影點(diǎn)。
可選的,獲取單元92可以包括:
獲取子單元,用于沿投影線段的起點(diǎn)到終點(diǎn)的方向,順序獲取投影線段在三維地形投影上經(jīng)過的第二柵格,第二柵格按照獲取的先后順序構(gòu)成第二柵格集合,先獲取的排序在先,后獲取的排序在后;
其中,投影線段的起點(diǎn)是第一投影點(diǎn)在海平面上的投影點(diǎn),投影線段的終點(diǎn)是第二投影點(diǎn)在海平面上的投影點(diǎn)。
本發(fā)明實(shí)施例中,第二柵格集合中的柵格是投影線段在三維地形投影上經(jīng)過的柵格的集合,且第二柵格中的第二柵格按照投影線段從起點(diǎn)到終點(diǎn)的方向經(jīng)過的順序排列。
假設(shè)投影線段CD在海平面上經(jīng)過的所有柵格如圖6所示,圖6為本發(fā)明實(shí)施例提供的投影線段CD經(jīng)過海平面上的柵格的一種示例圖。圖6中,投影線段CD共經(jīng)過6個(gè)柵格,即第二柵格集合包括3-8號(hào)柵格,對(duì)第二柵格集合中的所有柵格進(jìn)行排序的方式為:按照從C點(diǎn)開始,線段CD上向D點(diǎn)的方向依次經(jīng)過柵格的順序?qū)Φ诙鸥窦现械乃袞鸥襁M(jìn)行排序?;诖?,本 發(fā)明實(shí)施例中,圖6所示示例中第二柵格集合中的柵格的排序依次為:5、6、7、8、3、4。而不是3、4、5、6、7、8,或其它順序。
還以圖6所示示例為例,假設(shè)三維地形中與海平面上的3號(hào)柵格對(duì)應(yīng)的柵格為a柵格,三維地形中與海平面上的4號(hào)柵格對(duì)應(yīng)的柵格為b柵格,三維地形中與海平面上的5號(hào)柵格對(duì)應(yīng)的柵格為c柵格,三維地形中與海平面上的6號(hào)柵格對(duì)應(yīng)的柵格為d柵格,三維地形中與海平面上的7號(hào)柵格對(duì)應(yīng)的柵格為e柵格,三維地形中與海平面上的8號(hào)柵格對(duì)應(yīng)的柵格為f柵格,則第一柵格集合中包含的柵格分別為:a柵格,b柵格,c柵格,d柵格,e柵格,f柵格。
第一柵格集合中柵格的排列順序是:c柵格,d柵格,e柵格,f柵格,a柵格,b柵格。
當(dāng)計(jì)算第一投影點(diǎn)A和第二投影點(diǎn)B構(gòu)成的線段AB與第一柵格集合中第一柵格的交點(diǎn)時(shí),先計(jì)算線段AB與c柵格的交點(diǎn),再計(jì)算線段AB與d柵格的交點(diǎn),然后計(jì)算線段AB與e柵格的交點(diǎn),之后計(jì)算線段AB與f柵格的交點(diǎn),之后計(jì)算線段AB與a柵格的交點(diǎn),之后計(jì)算線段AB與b柵格的交點(diǎn)。
在計(jì)算過程中,若計(jì)算到線段AB與第一柵格集合中某個(gè)柵格存在交點(diǎn)則不再計(jì)算線段AB與第一柵格集合中后續(xù)柵格的交點(diǎn)。例如,若計(jì)算出線段AB與c柵格的交點(diǎn),則確定線段AB與c柵格的交點(diǎn)為操作點(diǎn)所拾取的三維地形點(diǎn),不再計(jì)算線段AB與第一柵格集合中其它柵格的交點(diǎn)。若線段AB與c柵格沒有交點(diǎn),則計(jì)算線段AB與d柵格的交點(diǎn),若計(jì)算出線段AB與d柵格的交點(diǎn),則確定線段AB與d柵格的交點(diǎn)為操作點(diǎn)所拾取的三維地形點(diǎn),不再計(jì)算線段AB與第一柵格集合中其它柵格的交點(diǎn),若線段AB與d柵格沒有交點(diǎn),則計(jì)算線段AB與e柵格的交點(diǎn)……,依此類推,直至計(jì)算出線段AB與第一柵格集合中的柵格的第一個(gè)交點(diǎn),或者,線段AB與第一柵格集合中的所有柵格都沒有交點(diǎn)。
可選的,投影單元91具體可以用于,將第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,以及三維地形以垂直于海平面的方式投影到海平面上。
本發(fā)明實(shí)施例中,為了方便計(jì)算,將第一投影點(diǎn)和第二投影點(diǎn)構(gòu)成的第一線段,以及三維地形均以垂直于海平面的方式投影到海平面上。也就是說,投影線以垂直于海平面的方式將第一線段和三維地形投影到海平面上。
可選的,本發(fā)明實(shí)施例提供的第一確定模塊72的一種結(jié)構(gòu)示意圖如圖10所示,可以包括:
變換單元101,用于對(duì)屏幕坐標(biāo)進(jìn)行視口變換的反變換,然后在對(duì)屏幕坐標(biāo)進(jìn)行視口變換的反變換的基礎(chǔ)上進(jìn)行投影變換的反變換,再在投影變換的反變換的基礎(chǔ)上進(jìn)行視圖變換的反變換,最后在視圖變換的反變換的基礎(chǔ)上進(jìn)行模型變換的反變換;
第二確定單元102,用于依據(jù)模型變換的反變換后得到的點(diǎn)擊射線確定屏幕坐標(biāo)在視景體的近剪裁面的第一投影點(diǎn),以及屏幕坐標(biāo)在所述視景體遠(yuǎn)剪裁面上的第二投影點(diǎn)。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。
結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。