WPF, XNA, SlimDX ... предложение для CAD-подобного настольного приложения?(С #) - PullRequest
4 голосов
/ 10 июня 2011

Вот что мне нужно сделать:

Чтобы создать CAD-подобное приложение, которое загружает облако точек (т. Е. Тысячи 3D-точек, представляющих 3D-объект) из файла, позволяет пользователям манипулировать точками (т. Е. Изменять форму, перемещая точки), многое нужно сделать вычислений точек на точках (например, нахождение точек пересечения между линиями и поверхностями, определение точки над или под поверхностью и т. д., измерение расстояний между точками или точками на поверхности и т. д.), а затем сохранение измененных точек в файл.

Он также предоставляет базовые функции, подобные CAD-интерфейсу, такие как увеличение / уменьшение масштаба, панорамирование, вращение камеры и т. Д.

Скорость - главная проблема.

Вместо того чтобы писать свои собственные функции для работы с матрицами и определять свои собственные классы точек / линий / поверхностей, я хотел бы использовать существующие библиотеки / API для выполнения этой работы.

Я знаю, что WPF, XNA и SlimDX предоставляют API для выполнения трехмерных геометрических вычислений, и все они, наконец, вызывают DirectX, но я просто новичок во всех из них. Мне интересно:

  1. Какой (или какое-либо другое предложение) может дать лучшую производительность в скорости.

  2. Насколько я понимаю, 3D-функции DirectX в основном касаются игровой графики / экранных выводов, а также подходят ли они для вычислений на уровне данных (т. Е. Используются 3D-функции для манипулирования данными точек, вычисления расстояний и т. Д.). , а не выводить его на экран)? Под подходящим, я имею в виду, если я создам тысячи вершин DirectX и создаю их, будет ли это намного медленнее, чем использование моих собственных типов данных и структур? Пожалуйста поправьте меня, если мое понимание неверно.

  3. Если я использую WPF, нужно ли мне также использовать XNA? Я как бы смешиваю эти две вещи.

  4. Предполагается, что приложение будет работать на ПК исследовательской лаборатории, у которого нет мощной игровой видеокарты, значит ли это, что XNA не является предпочтительным?

  5. Для этого приложения следует использовать предложение о технологиях?

Спасибо !!

======== обновление

Чтобы сделать его более понятным, приложение будет загружать ~ 108 000 точек в 3D, и каждая точка будет формировать поверхности с другими смежными точками, поэтому примерно столько же трехмерных поверхностей задействовано (я не генерирую их в одно и то же время). Я сделаю много трехмерных геометрических и матричных вычислений с точкой и поверхностями, такими как пересечение, интерполяция, преобразование и т. Д., Поэтому скорость «вычислений» является моей главной задачей. Большую часть времени я буду рисовать только конечный результат на экране, а рисование - это в основном линии и точки, скорость «рисования» не представляет большой проблемы. так что на самом деле это не приложение с интенсивным использованием графики, а приложение с интенсивными геометрическими вычислениями.

Прочитав ответ и комментарии, я подумаю над двумя вариантами:

  1. хранить и вычислять данные с примитивными типами данных и преобразовывать данные в структуры данных WPF / XNA / SlimDX при их рисовании на экране, или

  2. использовать эти структуры данных API для хранения, расчета и отрисовки всех этих точек.

какой из них лучше?

Ответы [ 3 ]

7 голосов
/ 11 июня 2011
  1. Честно говоря, если производительность - ваша главная задача, я бы выбрал API, который приблизит вас к аппаратному обеспечению. Меньше запутывания = больше скорости. В этом случае, из предоставленных вами вариантов, SlimDX - лучший вариант, за которым следует XNA и, наконец, WPF.
  2. Нет, DirectX должен использовать эффективные структуры данных и алгоритмы.Подумайте об этом - смогут ли игры, использующие DirectX, работать на подходящей частоте кадров, если все вычисления DirectX по своей сути медленные?
  3. Нет, WPF и XNA являются взаимоисключающими.WPF - это платформа для создания отзывчивых и интуитивно понятных пользовательских интерфейсов .XNA, с другой стороны, является основой для создания игр.
  4. Не обязательно.На самом деле это означает, что WPF не является предпочтительным, так как WPF перенесет большую часть работы на совместимые видеокарты.Если WPF не может найти подходящую видеокарту, центральный процессор возьмется за эту работу, что приведет к снижению производительности.
  5. Как я уже говорил, для приложения с интенсивным использованием графики, такого как описанное вами,чем ближе к оборудованию, тем лучше.Native DirectX или SlimDX - хорошие варианты.
0 голосов
/ 27 октября 2011

Несколько недель назад я проверил пределы XNA. Я хочу знать, сколько рекламных щитов (ускоренных графических процессоров) движок в состоянии иметь дело. Результат: Pure XNA: рекламные щиты 350 тыс. XNA как контекст рендеринга в WPF: 100 000 рекламных щитов

Я не знаю, почему движок замедляется при рендеринге в элемент управления WinFormHost. Некоторая отладка показывает, что GraphcisDevice.Present ()

0 голосов
/ 11 июня 2011

Рассматривали ли вы разработку своей функциональности в качестве плагина для существующей среды САПР? Например, AutoCAD имеет очень мощный SDK c ++ (ObjectARX), а также предоставляет управляемый .NET API. Вы можете использовать c # и WPF для разработки своих расширений. Он имеет существующие библиотеки геометрии, которые вы можете использовать повторно. Конечно, AutoCAD имеет свою цену, но есть альтернативы. Например BricsCAD. Я не уверен, что BricsCAD предоставляет API .NET.

Разработка приложения с нуля займет недели, если не месяцы. Если бы я разработал вашу функциональность как плагин для AutoCAD, мне потребовался бы день.

Подумайте, действительно ли вам нужно развернуть свою собственную среду САПР.

...