2011-05-19 85 views
2

我開發顯示一個大的肥胖型(約1M頂點),靜態2D圖像的應用程序。由於內存限制問題,每次用戶滾動或縮放時,我一直在向維也納各組織提供新數據,給人的印象是整個圖像「存在」,即使它沒有。 enter image description here 有兩個問題的方法:1)雖然反應是「足夠好」,它會更好,如果我能做出滾動縮放更快,更連貫。 2)我一直堅持可以在一次繪製中完成的64k頂點限制,這可以嚴格限制一次可以顯示多少圖像。能夠看到更多的圖像,甚至是同時看到所有的圖像將是很好的。儘管目前的性能再次足夠好,因爲我們處於原型階段,並且已經設置了數據以應對侷限性,但要達到產品級別,我們必須擺脫這種限制。2D的OpenGL ES架構

最近我發現,通過使用「機器人:largeHeap」選項,我可以得到一個摩托羅拉XOOM,這意味着我可以存儲在維也納組織整個圖像256 MB的堆空間。在我的理想世界中,我只需將OpenGL引擎傳遞給VBOs,並告訴它相機已移動,或使用glScale/glTranslate進行縮放/滾動。

我的問題是:我是在正確的軌道上?我應該總是「畫出」所有塊,並讓OpenGl弄清楚哪些實際上會被看到,或者找出哪些塊是我自己可見的?使用類似gluLookAt和glScale/glTranslate之間的任何區別?

我不在乎寬高比失真(圖像是數學生成的,而不是照片),它比它高很多,在未來的頂點數量可能會變得更大,更大(例如60M)。謝謝你的時間。 enter image description here

+0

「看到這一切在同一時間」我希望在手機上呈現60M頂點@ 30fps的是不是一個強大的需求,順便說一句。您必須通過限制最小變焦倍數以及提供良好的降級(詳細程度)來減少60M。 – Calvin1602 2011-05-19 15:17:14

+0

@ Calvin1602不,這不是要求,謝天謝地。 :-) – 2011-05-19 16:07:46

+0

希望很明顯,第二個圖像有一個錯字。右側的塊應該被標記爲「塊n」。 – 2011-05-19 16:08:20

回答

4

不要讓OpenGL的找出自己有什麼在屏幕上。他不會。所有頂點將被轉換,並且所有不在屏幕上的人將被剪裁;但是你有更好的關於你的場景的OpenGL知識。

使用huuuge 256Mo VBO會讓你每次渲染整個場景,每一次,這是不好的性能與互感器的所有頂點。

使一些小的維也納各組織(例如3×3網格只應在任何時刻可見),並僅顯示那些是可見的。可選預填基於運動外推未來維也納組織...

有gluLookAt和glTranslate/......沒有什麼區別。兩個計算矩陣,就是這樣。

順便說一句,如果你的圖片是靜態的,你不能預先計算它(點菜谷歌地圖)?同樣,您的數據在縮小時提供了一些「減少」的方法嗎?例如對點雲,只顯示出1 N個點的...

+0

感謝您的回答。 「預先計算」是什麼意思?正如你所建議的那樣,我可以創建一系列的維也納國際組織,但聽起來你的意思超出了這個範圍。也許你的意思是紋理?在這個問題中,我忘記提到這些不是紋理,只是彩色化頂點,我需要OpenGl來進行平滑/插值。 – 2011-05-19 16:11:47

+0

是的,我的意思是一個真正的紋理。您可以在紋理(「RTT」)中渲染一次頂點,並僅顯示紋理( - > 1四 - > 4個頂點而不是許多)。順便說一句,縮小時,你可以使用以前的紋理來渲染新的紋理,所以它可能*可以繪製60M的頂點作爲你的特定情況。 – Calvin1602 2011-05-19 21:19:47