2011-07-14 59 views
3

我有一個三維浮點矩陣,在最壞的情況下,大小可能是(200000x1000000x100),我想用Qt/OpenGL可視化這個矩陣。呈現海量數據

由於元素的數量非常高,我想用一種方式渲染它們,當相機遠離矩陣時,我只是展示了一些有趣的點,它們近似了矩陣的外觀。當相機靠近時,我想獲得更多細節,因此計算更多元素。

我想知道是否有技術處理這種可視化。

+1

1e5³浮點元素。這相當於大約4PB的數據。你確定這個數字是正確的嗎? – datenwolf

+0

@datenwolf:我猜他的矩陣稀疏 –

+3

@eznme:可能。但我在考慮最壞的情況。我認爲最好的攻擊線是將矩陣(假設它是稀疏的)轉化爲空間細分樹(Kd或Octree)並將其可視化達到特定分叉深度閾值。 – datenwolf

回答

7

總體思路被稱爲細節級別渲染,本身就是一門完整的科學。

對於您的域名我會建議兩個步驟:

1)減少細胞的數量在不同大小的立方體平均(算術平均功能),他們和緩存的立方體(在磁盤上以及內存)。這裏的「不同」表示在多個立方體的大小上有相同的數據,例如, 10000x10000x10000的粗粒立方體和100x100x100單元的更精細的立方體,從而產生多個細節層次。你有以分層結構來組織這些(包含多個較小的是較大的)和用於此我建議一個八叉樹http://en.wikipedia.org/wiki/Octree

2)第二個步驟是實際呈現這個八叉樹的部分: 爲此,請使用攝像機點到子立方體的距離。通過立方體並決定使用此距離函數和啓發式選擇或猜測的閾值來進入子立方體或渲染較大的立方體。

(2)可以進一步優化,但這是可選的:要優化此渲染,將待渲染的立方體組織成圖層:圖層的方向(無論是在x,y或z切片中)取決於它應該接近垂直的相機視點。然後將每個切片渲染成紋理,並且您只需爲每個切片渲染具有該紋理的單個四邊形,而1000個四邊形則無需渲染。

+0

感謝您的好評,先生,我會研究你在接下來的幾周提到。我認爲這將是最好的,如果你還可以推薦我一些文獻,因爲我有不同的知識背景,我需要閱讀更多關於這個主題。 –

+0

關於這一點你不需要太多瞭解,操作(在八叉樹中遞歸地分組,計算多維數據集中所有數據的平均值並存儲它,計算到(子)多維數據集的距離,渲染它們)在概念上很容易;但有一個實現細節可能非常棘手,需要記住:對許多數字求平均值可能會在數值上不穩定;將所有單元格添加到單個雙精度浮點數中,然後除以單元格數量不是最優的(請參閱有關算術平均值的數字文獻)。 –

2

Qt有一些高效渲染大量元素的方法。檢查QT的一部分examples/demo

+0

我已經檢查過了,謝謝 –