1

私はスタック オーバーフローが初めてで、3D グラフィックス プログラミングも初めてです。データを読み取り (現在は区切りテキスト ファイルから読み取りますが、最終的にはデータ配列から読み取ります)、データを 3D でグラフィカルに表示するアプリを作成するタスクが与えられました。データは、ログをスキャンしている 3D スキャナーから読み取った x、y、z 座標です。これらのログの 3D 表現を 4 つの異なる角度から画面に表示する必要があります。データを 2 次元の Point3D 配列に読み込み、それを使用して HelixViewport3D で 3D モデルを作成しています。ネストされた for ループを使用して、配列内のデータ ポイントが特定の x、Z 境界内にあることを確認します。範囲内にある場合は、そのデータから三角形を作成する必要があります。配列全体が渡されたら、Model3DGroup をビューポートの子に追加します。

topModel.Content = topGroup;
this.mainViewport.Children.Add(topModel);

これには約 8 秒かかり、画面上のすべてのデータ (約 500,000 の三角形) では、ズーム、パン、回転は非常に遅くなります。WPF 3D グラフィックスのパフォーマンスを向上させる方法はありますか? 実際には、完成したアプリでズーム/パン/回転できるようにする必要はありませんが、デバッグには役立ちます。最終的なアプリは、異なる側面から 4 つの異なる方法で静的に表示された同じモデルになります。ただし、データを読み込んでグラフィックを 1 ~ 5 秒で表示できるようにする必要があります。どんな助けでも大歓迎です。私の質問がかなり明確であることを願っています!

編集:頂点バッファリングをさらに掘り下げた後、これが私がする必要があることです。ポイント使いすぎ。C# での頂点/インデックス バッファリングに関する文献を誰かが教えてくれれば、大歓迎です!

4

2 に答える 2

3

私はこの問題を解決しました。スカイホーク大尉、ご意見ありがとうございます!これが WPF3D の欠点であると疑っていたということで、適切な場所を調べることができました。私の問題は、これを書いた方法がすべての三角形を独自のModelVisual3Dにしたことでした!! 3 つの GeometryModel3D (sp?) オブジェクトのみを含むようにコードを書き直し、すべての三角形を MeshGeometry3D に配置し、メッシュを使用してモデルを作成しました。これにより、モデルは 0.1 秒未満でレンダリングされました。新しい問題が発生しました。何らかの理由で、ビューポートのモデルに三角形の約半分しか表示されません。理由はわかりませんが、メッシュに Point3D ポイントが多すぎるか、三角形インデックスが多すぎる可能性があります。

于 2013-04-26T15:07:47.707 に答える