2017-08-17 72 views

回答

0

你會很快耗盡內存女巫這樣的架構(具有巨大的帆布和觀看的只是一部分)。

保留某些列表中的幾何元素,包含位置/大小,然後使用「攝像機視圖」矩陣來計算每個元素的實際座標(此矩陣將允許您執行所有類型的視口操作,四處移動,縮放,旋轉,甚至有些傾斜)。

有一個帆布這是唯一在屏幕上,並且只有1:1像素大小的,即作爲目標的視口表面被在繪製。然後,每個形狀在轉換後適合該區域,以適當的比例繪製在畫布上。

這樣,如果你的元素使用矢量圖形,將保持鋒利,甚至在高縮放級別的清脆,而全帆布將已經超出了在這種情況下內存限制。

但是這樣做,你可能會遇到不同類型的問題,具有性能。每次從頭開始重新繪製畫布以及大量元素可能需要相當長的時間。有幾種技術可以改善這一點,我不相信你會有成千上萬的元素,所以清除所有元素應該沒問題。但是可以實現各種緩存,包括重新使用幾個畫布來「平鋪」最終區域,以改善移動速度。

但是,首先,您可以簡單地使用變換後的幾何圖形重新繪製畫布,在變換後,Paint本身已經將區域之外的元素剪掉。你有這個基本的解決方案(而你卻寫的代碼,這將觸摸手勢轉化爲觀察矩陣的修改,而不是滾動佈局)後,您可以用性能試驗,也許簡單的方式將您的需求已經足夠了,而不任何平鋪/緩存。

或許檢查引擎是如何工作的3D,他們沒有巨大的畫布上,但他們在屏幕上繪製只可見區域,他們第一個轉換的幾何形狀的點座標的形式,而不是在渲染的像素。該原理也可應用於二維(同樣的事情,沒有六自由度旋轉和線性透視)。