我有一個過程,隨着時間的推移積累了大部分靜態數據 - 以及它的很多數以百萬計的數據元素。數據的一小部分可能會偶爾發生變化,但大部分情況並不會改變。在GPU上優化數據可視化?
但是,我想允許用戶自由地改變這些數據的形狀和顏色。
有沒有一種方法可以將數據作爲數據存儲在GPU上。然後有許多方法可以將數據轉換爲GPU上可呈現的內容。然後用戶可以在這些算法中進行選擇,並且我們可以高效地進行交換,而不必觸摸數據。此外,顏色ID將在數據中,但用戶可以改變每個ID應匹配的顏色,而不用觸摸數據。
因此,舉例來說,可能有如下的數據:
[1000,602,1,1] [1003 602.5,2,2]
注意:數據是NOT頂點,而是可能需要一些計算或查找來轉換爲頂點。
用戶可以選擇可視化算法。假設一個人會在(0,602,0)和(3,602.5,100)處顯示兩個立方體。用戶選擇顏色ID 1 =藍色和2 =綠色。所以起源立方體顯示爲藍色,另一個顯示爲綠色。
然後,根本沒有對數據進行任何修改,用戶選擇不同的可視化,現在球體顯示在(10,602,10)和(13,602.5,20),並且顏色不同,因爲用戶改變了顏色映射。
另一種可視化可能會顯示所有數據元素,或者爲每個組4個矩形之間的線路等
就是上面描述的東西,可以以簡單的方式來完成?最好怎麼做?
請注意,我們將添加新數據,並追加到最後。可能每秒發生數千次的爆發。現有數據的修改會更爲少見,並且對這些情況的性能影響是可以接受的。用戶更改算法和顏色映射相對較少。
我寧願使用跨平臺API(跨操作系統和GPU)來做到這一點,所以我假設OpenGL。
謝謝!有什麼方法可以優化附加到VBO?因爲我有時可能會很快添加數據。 另外,在幾何着色器中,它是否可以一次訪問多個點,以便在一種情況下可以爲每個點創建一個形狀,但在其他情況下,它會爲每個多點創建一個形狀? – mentics 2013-04-10 06:44:06
'glBindBuffer'接受一個* target *參數(它暗示着這個VBO是否保存頂點或索引數據)。 'glBufferData'接受一個*用法*參數(暗示數據是靜態的,動態的還是流的,以及應用程序是否會讀取,複製或繪製)。 – 2013-04-10 06:49:14
此外,什麼確切的提示組合會給**你**最好的性能只能通過分析發現。這真的歸結於您的硬件+ OpenGL驅動程序版本。 – 2013-04-10 06:55:14