2015-05-02 6 views
2

В моем приложении есть прозрачный InkCanvas поверх объекта Viewport3D. Viewport3D показывает большую трехмерную сетку. Пользователь набросит на InkCanvas, чтобы выбрать часть 3D-модели, которую рендерит Viewport3D. Пользователю разрешено рисовать круги на InkCanvas.
Когда пользователь наброски, я перебираю все точки, которые попадают внутрь рисованного круга, и я использую функцию VisualTreeHelper.HitTest для выполнения raycasting и определения, какие вершины сетки Viewport3D совпадают с эскизом.WPF VisualTreeHelper.HitTest с использованием нескольких потоков

Проблема в том, что VisualTreeHelper.HitTest очень медленный. В случае, если я использовал Parallel.For, я все равно не смог бы выполнить несколько raycastings на Viewport3D параллельно (из-за того, что собственный поток объекта Viewport3D является потоком пользовательского интерфейса, и мне нужно будет использовать Viewport3DDispatcher.Invoke что в первую очередь приведет к поражению цели: Parallel.For.)

Есть ли способ ускорить это, используя несколько потоков? Еще лучше, есть ли альтернативное решение?

ответ

1

После многого поиска я думаю, что то, чего я хочу, невозможно в рамках WPF. Для этого я переключился на OpenTK и сам реализовал raycasting.
Теперь у меня есть WPF-mimick в OpenTK с гораздо лучшей производительностью. Код available here, если кому-то интересно.

 Смежные вопросы

  • Нет связанных вопросов^_^