本技術涉及三維圖像,尤其涉及一種三維空間中體元柵格數據的顯示方法及裝置。
背景技術:
1、體元柵格是對三維連續(xù)空間或現象的規(guī)則劃分,由在三維空間規(guī)則排列的體元(正方體/正六棱柱)構成。體元柵格通常用于表達通訊信號、溫度、風場、污染等三維場數據及日照率等三維分析結果。
2、隨著采集技術的發(fā)展,體元柵格數據的精度越來越高,數據采集范圍也越來越大,導致體元柵格數據的數據量日益龐大。如果將三維空間的體元柵格數據都加載到顯存區(qū)域中進行三維圖像渲染時,對顯存區(qū)域的空間要求會非常高,如果顯存區(qū)域的空間有限,會導致渲染性能較低。
3、因此,亟需一種能夠基于有限的顯存區(qū)域渲染三維圖像的技術方案。
技術實現思路
1、鑒于上述問題,本技術提供了一種三維空間中體元柵格數據的顯示方法及裝置,以基于有限的顯存區(qū)域實現三維圖像的渲染顯示,實現提高對三維圖像渲染顯示的渲染性能的目的。具體方案如下:
2、本技術第一方面提供一種三維空間中體元柵格數據的顯示方法,所述方法包括:
3、對三維空間中的體元柵格數據進行處理,以得到瓦片數據,所述瓦片數據包含多層瓦片層,每層所述瓦片層包含至少一個柵格瓦片,每個所述柵格瓦片中的像素組成像素邊長為第一數量的立方體;不同層級的所述瓦片層所包含的柵格瓦片的數量不同;不同層級的所述瓦片層所包含的柵格瓦片對應的數據地址范圍不同;
4、根據虛擬相機角度對應的數據地址范圍,將所述瓦片數據中第二數量的目標瓦片層中第三數量的目標柵格瓦片加載到顯存區(qū)域;所述第二數量小于所述瓦片數據中所述瓦片層的總數量;
5、至少將所述顯存區(qū)域的存儲地址提供給著色器,以使得圖形處理器運行所述著色器,所述著色器按照所述存儲地址讀取所述體元柵格數據并進行三維圖像渲染顯示。
6、在一種可能的實現中,對三維空間中的體元柵格數據進行處理,以得到瓦片數據,包括:
7、將三維空間中的體元柵格數據作為當前瓦片層;
8、對所述當前瓦片層中的體元柵格數據中的像素按照所述第一數量進行瓦片劃分,以得到所述當前瓦片層中的柵格瓦片;
9、對所述當前瓦片層中的體元柵格數據按照鄰近合并規(guī)則進行像素合并,以得到低一層級的瓦片層;
10、將所述低一層級的瓦片層作為當前瓦片層,執(zhí)行所述對所述當前瓦片層中的體元柵格數據按照鄰近合并規(guī)則進行像素合并,以得到低一層級的瓦片層,直到所述低一層級的瓦片層中僅有一個柵格瓦片;
11、其中,所述鄰近合并規(guī)則包括:將分別在橫軸、縱軸和豎軸上鄰近的目標數量的像素進行合并。
12、在一種可能的實現中,對三維空間中的體元柵格數據進行處理,以得到瓦片數據,包括:
13、將三維空間中的體元柵格數據作為當前瓦片層;
14、對所述當前瓦片層中的體元柵格數據按照鄰近合并規(guī)則進行像素合并,以得到低一層級的瓦片層;
15、將所述低一層級的瓦片層作為當前瓦片層,執(zhí)行所述對所述當前瓦片層中的體元柵格數據按照鄰近合并規(guī)則進行像素合并,以得到低一層級的瓦片層,直到所述低一層級的瓦片層中的體元柵格數據的像素數量匹配所述第一數量;
16、分別對每個層級的瓦片層中的體元柵格數據中的像素按照所述第一數量進行瓦片劃分,以得到每個層級的瓦片層中的柵格瓦片;
17、其中,所述鄰近合并規(guī)則包括:將分別在橫軸、縱軸和豎軸上鄰近的目標數量的像素進行合并。
18、在一種可能的實現中,所述顯存區(qū)域包含第二數量的子區(qū)域,每個所述子區(qū)域以區(qū)域標識唯一表征對應的子區(qū)域;每個所述子區(qū)域包含第三數量的瓦片區(qū)域,每個所述瓦片區(qū)域以瓦片標識唯一表征對應的瓦片區(qū)域;每個所述瓦片區(qū)域用于存儲一個所述柵格瓦片;
19、其中,根據虛擬相機角度對應的數據地址范圍,將所述瓦片數據中第二數量的目標瓦片層中第三數量的目標柵格瓦片加載到顯存區(qū)域,包括:
20、如果所述顯存區(qū)域中已經加載有歷史柵格瓦片,根據虛擬相機角度對應的數據地址范圍和所述歷史柵格瓦片對應的歷史地址范圍,獲得增量地址范圍;按照所述增量地址范圍,將所述增量地址范圍對應的增量柵格瓦片加載到所述顯存區(qū)域中對應的子區(qū)域中相應的瓦片區(qū)域內;
21、如果所述顯存區(qū)域中沒有加載歷史柵格瓦片,根據所述虛擬相機角度對應的數據地址范圍,獲得所述第二數量的目標瓦片層對應的數據地址范圍;按照所述第二數量的目標瓦片層對應的數據地址范圍,將所述第二數量的目標瓦片層中所述第三數量的目標柵格瓦片分別加載到所述顯存區(qū)域中對應的子區(qū)域中相應的瓦片區(qū)域內。
22、在一種可能的實現中,在所述顯存區(qū)域中:
23、所述目標瓦片層在所述顯存區(qū)域中被加載到的子區(qū)域的區(qū)域標識為:所述目標瓦片層的目標層級標識對所述第二數量取余;
24、所述目標瓦片層中的目標柵格瓦片在相應子區(qū)域中橫軸上被加載到的瓦片區(qū)域的瓦片標識為:所述目標瓦片層中的目標體元柵格數據在橫軸上的數據地址,對所述子區(qū)域在橫軸上的柵格瓦片的數量取余;
25、所述目標瓦片層中的目標柵格瓦片在相應子區(qū)域中縱軸上被加載到的瓦片區(qū)域的瓦片標識為:所述目標瓦片層中的目標體元柵格數據在縱軸上的數據地址,對所述子區(qū)域在縱軸上的柵格瓦片的數量取余;
26、所述目標瓦片層中的目標柵格瓦片在相應子區(qū)域中豎軸上被加載到的瓦片區(qū)域的瓦片標識為:所述目標瓦片層中的目標體元柵格數據在豎軸上的數據地址,對所述子區(qū)域在豎軸上的柵格瓦片的數量取余;
27、所述目標瓦片層中所述目標柵格瓦片中的體元柵格數據在相應瓦片區(qū)域中橫軸上被加載到的存儲地址為:所述目標瓦片層中所述目標柵格瓦片中的體元柵格數據在橫軸上的數據地址,對所述子區(qū)域在橫軸上的柵格瓦片的數量取余后乘以所述第一數量;
28、所述目標瓦片層中所述目標柵格瓦片中的體元柵格數據在相應瓦片區(qū)域中縱軸上被加載到的存儲地址為:所述目標瓦片層中所述目標柵格瓦片中的體元柵格數據在縱軸上的數據地址,對所述子區(qū)域在縱軸上的柵格瓦片的數量取余后乘以所述第一數量;
29、所述目標瓦片層中所述目標柵格瓦片中的體元柵格數據在相應瓦片區(qū)域中豎軸上被加載到的存儲地址為:所述目標瓦片層中所述目標柵格瓦片中的體元柵格數據在豎軸上的數據地址,對所述子區(qū)域在豎軸上的柵格瓦片的數量取余后乘以所述第一數量。
30、在一種可能的實現中,如果所述虛擬相機角度發(fā)生縮放,所述增量地址范圍包含:至少一個第一層級標識所屬瓦片層中所述第三數量的目標柵格瓦片對應的數據地址范圍;所述第一層級標識根據所述虛擬相機角度縮放的空間尺度獲得;
31、其中,所述第一層級標識與所述顯存區(qū)域中的最小目標層級標識連續(xù),或者,所述第一層級標識與所述顯存區(qū)域中的最大目標層級標識連續(xù);且,所述顯存區(qū)域中,所述第一層級標識所屬的瓦片層在所述顯存區(qū)域中被加載到的子區(qū)域的區(qū)域標識為:所述第一層級標識對所述第二數量取余;
32、如果所述虛擬相機角度發(fā)生平移,所述增量地址范圍包括:每個所述目標瓦片層中至少一個增量柵格瓦片對應的數據地址范圍;所述增量柵格瓦片根據所述虛擬相機角度平移的地址范圍獲得;
33、所述增量柵格瓦片在相應子區(qū)域中橫軸上被加載到的瓦片區(qū)域的瓦片標識為:所述增量柵格瓦片中的體元柵格數據在橫軸上的數據地址,對所述子區(qū)域在橫軸上的柵格瓦片的數量取余;
34、所述增量柵格瓦片在相應子區(qū)域中縱軸上被加載到的瓦片區(qū)域的瓦片標識為:所述增量柵格瓦片中的體元柵格數據在縱軸上的數據地址,對所述子區(qū)域在縱軸上的柵格瓦片的數量取余;
35、所述增量柵格瓦片在相應子區(qū)域中豎軸上被加載到的瓦片區(qū)域的瓦片標識為:所述增量柵格瓦片中的體元柵格數據在豎軸上的數據地址,對所述子區(qū)域在豎軸上的柵格瓦片的數量取余;
36、所述增量柵格瓦片中的體元柵格數據在相應瓦片區(qū)域中橫軸上被加載到的存儲地址為:所述增量柵格瓦片中的體元柵格數據在橫軸上的數據地址,對所述子區(qū)域在橫軸上的柵格瓦片的數量取余后乘以所述第一數量;
37、所述增量柵格瓦片中的體元柵格數據在相應瓦片區(qū)域中縱軸上被加載到的存儲地址為:所述增量柵格瓦片中的體元柵格數據在縱軸上的數據地址,對所述子區(qū)域在縱軸上的柵格瓦片的數量取余后乘以所述第一數量;
38、所述增量柵格瓦片中的體元柵格數據在相應瓦片區(qū)域中豎軸上被加載到的存儲地址為:所述增量柵格瓦片中的體元柵格數據在豎軸上的數據地址,對所述子區(qū)域在豎軸上的柵格瓦片的數量取余后乘以所述第一數量。
39、在一種可能的實現中,所述著色器通過以下方式讀取所述體元柵格數據:
40、對所述虛擬相機視角對應的數據地址進行歸一化,以得到紋理地址;
41、將所述顯存區(qū)域中最高層級的目標瓦片層為當前瓦片層;
42、按照所述當前瓦片層對應的歸一化矩陣,判斷所述紋理地址是否匹配所述當前瓦片層對應的數據地址范圍;
43、如果所述紋理地址匹配所述當前瓦片層對應的數據地址范圍,按照所述當前瓦片層對應的歸一化矩陣和偏移矩陣的乘積,基于所述存儲地址,從所述顯存區(qū)域中所述當前瓦片層對應的子區(qū)域中讀取相應的體元柵格數據;
44、如果所述紋理地址不匹配所述當前瓦片層對應的數據地址范圍,將相對于所述當前瓦片層的低一層級瓦片層作為當前瓦片層,執(zhí)行所述按照所述當前瓦片層對應的歸一化矩陣,判斷所述虛擬相機視角對應的數據地址是否匹配所述當前瓦片層對應的數據地址范圍,直到所述當前瓦片層為所述顯存區(qū)域中最低層級的目標瓦片層。
45、在一種可能的實現中,所述當前瓦片層對應的歸一化矩陣為四行四列的矩陣,其中:
46、第一行第一列的矩陣元素為:對2取第四數量的冪值,再除以所述當前瓦片層在橫軸上的柵格瓦片的數量;所述第四數量為所述當前瓦片層的目標層級標識;
47、第二行第二列的矩陣元素為:對2取所述第四數量的冪值,再除以所述當前瓦片層在縱軸上的柵格瓦片的數量;
48、第三行第三列的矩陣元素為:對2取所述第四數量的冪值,再除以所述當前瓦片層在豎軸上的柵格瓦片的數量;
49、第四行第四列的矩陣元素為1;
50、第四行第一列的矩陣元素為:將所述當前瓦片層中在橫軸上最小的瓦片標識除以所述當前瓦片層在橫軸上的柵格瓦片的數量后,取負值;
51、第四行第二列的矩陣元素為:將所述當前瓦片層中在縱軸上最小的瓦片標識除以所述當前瓦片層在縱軸上的柵格瓦片的數量后,取負值;
52、第四行第三列的矩陣元素為:將所述當前瓦片層中在豎軸上最小的瓦片標識除以所述當前瓦片層在豎軸上的柵格瓦片的數量后,取負值;
53、其他矩陣元素為0。
54、在一種可能的實現中,所述當前瓦片層對應的偏移矩陣為四行四列的矩陣,其中:
55、第一行第一列的矩陣元素為1;
56、第二行第二列的矩陣元素為1;
57、第三行第三列的矩陣元素為1;
58、第四行第四列的矩陣元素為1;
59、第四行第一列的矩陣元素為:將所述當前瓦片層中在橫軸上最小的瓦片標識對所述當前瓦片層在橫軸上的柵格瓦片的數量取余后,再除以所述當前瓦片層在橫軸上的柵格瓦片的數量;
60、第四行第二列的矩陣元素為:將所述當前瓦片層中在縱軸上最小的瓦片標識對所述當前瓦片層在縱軸上的柵格瓦片的數量取余后,再除以所述當前瓦片層在縱軸上的柵格瓦片的數量;
61、第四行第三列的矩陣元素為:將所述當前瓦片層中在豎軸上最小的瓦片標識對所述當前瓦片層在豎軸上的柵格瓦片的數量取余后,除以所述當前瓦片層在豎軸上的柵格瓦片的數量;
62、其他矩陣元素為0。
63、本技術第二方面提供一種三維空間中體元柵格數據的顯示裝置,所述裝置包括:
64、瓦片處理單元,用于對三維空間中的體元柵格數據進行處理,以得到瓦片數據,所述瓦片數據包括多層瓦片層,每層所述瓦片層包含至少一個柵格瓦片,每個所述柵格瓦片中的像素組成像素邊長為第一數量的立方體;不同層級的所述瓦片層所包含的柵格瓦片的數量不同,不同層級的所述瓦片層所包含的柵格瓦片對應的數據地址范圍不同;
65、瓦片加載單元,用于根據虛擬相機角度對應的數據地址范圍,將所述瓦片數據中第二數量的目標瓦片層中第三數量的目標柵格瓦片加載到顯存區(qū)域;所述第二數量小于所述瓦片數據中所述瓦片層的總數量;
66、瓦片渲染單元,用于至少將所述顯存區(qū)域的存儲地址提供給著色器,以使得圖形處理器運行所述著色器,所述著色器按照所述存儲地址讀取所述體元柵格數據并進行三維圖像渲染顯示。
67、本技術第三方面提供一種計算機程序產品,包括計算機可讀指令,當所述計算機可讀指令在電子設備上運行時,使得所述電子設備實現上述第一方面或第一方面任一實現方式的三維空間中體元柵格數據的顯示方法。
68、本技術第四方面提供一種電子設備,包括至少一個處理器和與所述處理器連接的存儲器,其中:
69、所述存儲器用于存儲計算機程序;
70、所述處理器用于執(zhí)行所述計算機程序,以使所述電子設備能夠實現上述第一方面或第一方面任一實現方式的三維空間中體元柵格數據的顯示方法。
71、本技術第五方面提供一種計算機存儲介質,所述存儲介質承載有一個或多個計算機程序,當所述一個或多個計算機程序被電子設備執(zhí)行時,能夠使所述電子設備上述第一方面或第一方面任一實現方式的三維空間中體元柵格數據的顯示方法。
72、借由上述技術方案,本技術提供的一種三維空間中體元柵格數據的顯示方法及裝置中,通過將三維空間中體元柵格數據劃分成多層包含柵格瓦片的瓦片層,這樣不需要將所有體元柵格數據加載到顯存區(qū)域,僅需要將較少的第二數量的目標瓦片層中第三數量的目標柵格瓦片加載到顯存區(qū)域即可,而超出虛擬相機角度對應的數據地址范圍的體元柵格數據則不需要加載到顯存區(qū)域,由此圖形處理器運行著色器,由著色器按照顯存區(qū)域的存儲地址讀取體元柵格數據并進行三維圖像的渲染顯示。由此,本實施例中只需要顯存區(qū)域能夠存儲第二數量的目標瓦片層中第三數量的目標柵格瓦片,對顯存區(qū)域的要求不會很高,這樣就可以基于有限的顯存區(qū)域對數據量較大的體元柵格數據進行渲染,由此可以提高對三維圖像渲染顯示的渲染性能。