3

地球のスライス(OpendTectやPetrelの地震モジュールなど)をレンダリングするプログラム(c#.NET 4.0 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));
4

1 に答える 1

1

ここにはいくつかのオプションがあります。

  • 現在のソリューションを最適化します。5000 * 5000*4は約100MBです。テクスチャをどのようにロードして表示しますか?最大1100個の3Dオブジェクトをレンダリングし、300MBのメモリを使用するアプリがあり、パフォーマンスは十分に良好です。純粋なパフォーマンス上の理由だけでなく、バ​​グを見つけるのに役立つプロファイラーを実行することを強くお勧めします。私はWPF3Dです。プロファイラーのおかげで、役に立たないテッセレーションを行っていることがわかりました。
  • テクスチャ全体の1つの低解像度画像と、テクスチャの一部であるいくつかの小さな高解像度画像を作成します。ユーザーがクリック/ズームインすると、ビューポートに合う小さな高解像度の画像が読み込まれます。グーグルマップと同様の効果。
  • XNAを使用します。XNAをWPF内でホストし、DXTテクスチャを使用できます。よくわかりませんが、WPFはそのテクスチャフォルマントを直接サポートしていません。
于 2012-04-23T11:57:42.203 に答える