2

InkCanvas私のアプリケーションでは、オブジェクトの上に透明がありViewport3Dます。はViewport3D、大きな 3D メッシュを示しています。ユーザーは でスケッチして、がレンダリングInkCanvasしている 3D モデルの一部を選択します。Viewport3Dユーザーは に円を描くことができますInkCanvas
ユーザーがスケッチすると、描画された円の内側にあるすべての点を繰り返し処理し、VisualTreeHelper.HitTest関数を使用してレイキャスティングを実行し、メッシュのどの頂点がViewport3Dスケッチと一致するかを判断します。

問題は、VisualTreeHelper.HitTest非常に遅いことです。を使用した場合Parallel.Forでも、Viewport3D で複数のレイキャスティングを並行して実行することはできません (オブジェクトの所有スレッドがViewport3DUI スレッドであり、オブジェクトを無効にするViewport3DDispatcher.Invoke関数を使用する必要があるため)。Parallel.Forそもそもの目的です。)

複数のスレッドを使用してこれを高速化する方法はありますか? さらに良いことに、代替ソリューションはありますか?

4

1 に答える 1

1

たくさん検索した結果、WPF フレームワークでは私が望むことは不可能だと思います。そのために OpenTK に切り替え、自分でレイキャスティングを実装しました。
これで、OpenTK に WPF 模倣があり、パフォーマンスが大幅に向上しました。興味のある方はこちらからコードを入手できます。

于 2015-05-23T14:35:30.323 に答える