3
我正在編寫一個渲染地球片(如OpendTect或Petrel的地震模塊)的程序(c#.NET 4.0 WPF 3D)。WPF 3D動態紋理
問題是,我需要能夠深入放大,並仍然可以看到細節。
我嘗試了一個巨大的細節紋理(5000x5000),但它吃了太多的內存(200-300 MB),並且當我嘗試增加尺寸時崩潰。
現在我想看看是否有任何使用動態紋理的方法 - 根據到相機的距離而改變的紋理。
或者可能有其他方式處理高分辨率表面?
我使用此代碼加載質地:
wbm = new WriteableBitmap(
(int)1306*scale,
(int)ns*scale,
96,
96,
PixelFormats.Indexed8,
new BitmapPalette(getColors()));
...
visual3d.Material = visual3d.BackMaterial
= new DiffuseMaterial(new ImageBrush(wbm));
感謝您的回覆。我曾經想過「谷歌地圖的方式」 - 問題是,如果您在放大模式下掃描整個表面,應用程序將加載所有這些小型高分辨率圖像,所以不是一個大的高分辨率圖像,而是獲得許多小高分辨率圖像,最終佔用相同的內存空間。 – 2012-04-23 12:19:54
5000 * 5000 * 4確實約爲100MB。但是,隨着C#創建的所有開銷,它變得非常大,爲300 MB。此外,巨大的紋理方式並不是一個可行的解決方案 - 我會有很多切片,並且如果每個切片需要200mb的內存,想象當20切片出現時會發生什麼。 – 2012-04-23 12:23:44
如果您將相機移動到一個切片的視圖之外,您將刪除參考,GC將收集內存。我建議你閱讀這篇文章http://stackoverflow.com/questions/538060/proper-use-of-the-idisposable-interface。不過,休格紋理是一個好方法,但是使用DXT--它是壓縮格式,應該使用大約1/8的內存。 – 2012-04-23 12:36:02