Подтвердить что ты не робот

Является ли WPF 3D хорошей альтернативой DirectX и OpenGL для сложных приложений?

Я использовал возможности WPF 3D для обучения и для нескольких реализаций, и я нашел, что он очень способен, и я также изучаю DirectX 11, и это очень сложно по сравнению с использованием 3D-классов в WPF. Я использовал только WPF 3D для очень простых вещей, мой вопрос:

Является ли WPF 3D одинаково хорошим для продвинутых приложений, таких как инструменты 3D-моделирования, игровые движки и 3D-моделирование и т.д., чтобы быть альтернативой DirectX и OpenGL?

Если в той же лиге есть что-то еще, пожалуйста, укажите это тоже.

4b9b3361

Ответ 1

Хороший вопрос. Ответ зависит от!

В более полезной ноте я могу сказать следующее: несколько лет назад я разработал 3D-рендеринг CAD-стиля в OpenGL. Это должно было отображать модели САПР для нефтяных вышек с объемом до 1 000 000 объектов и позволять пользователю приближаться к деталям или уменьшать масштаб, перемещать объекты и т.д. Я могу с уверенностью сказать, что WPF не подходит для этого тип приложения, поскольку он будет слишком медленным. Это приложение было разработано с использованием С++/CLI и связано с .NET GUI (панель инструментов, окно) с С++ на OpenGL (поверхность рендеринга), и даже это привело к поражению производительности над собственным приложением С++/OpenGL из-за thunking. Итак, если вам нужна самая высокая производительность, вы не можете победить родной С++ с DirectX или OpenGL.

WPF может обеспечить высокопроизводительную 3D-графику и гладкую интерактивность для более простых 3D-приложений. Например, поверхность 3D-диаграммы или 3D-карусель, даже просмотрщик 3D-моделей CAD, пока модель была довольно простой. После того, как количество объектов начнет увеличиваться, вы заметите, что движок рендеринга не может его обработать, - когда вам нужно переключиться на механизм рендеринга, который обеспечивает прямой доступ к графическому процессору.

Для решения на полпути (управляемый + DirectX) попробуйте SharpDX. Это в основном реализация с открытым исходным кодом Managed DirectX и чрезвычайно мощная и универсальная. Снижение производительности управляемого и родного С++ незначительно (~ 5%), и, когда все сделано правильно, управляемый DirectX может быть чрезвычайно эффективным.

Что-то, что мы сделали, это интеграция DirectX непосредственно с WPF через D3DImage. Мы достигли этого в WPF 3D Chart Control, который использует DirectX11 для чертежа (а не WPF3D). Это напрямую связано с родным DirectX в WPF, но вы можете получить одинаково хорошие результаты с помощью SharpDX, который мы использовали для создания высокоскоростной WPF Drawing Plugin здесь.

Для демонстрации WPF3D я предлагаю вам попробовать эту ссылку. Как вы заметили, WPF3D может сделать чрезвычайно визуально привлекательные, а иногда и сложные примеры, но вы не найдете там каких-либо 100 000 объектов нефтяных вышек;)

Наконец, что вы хотели сделать в WPF 3D? Просто интересная тема или у вас есть конкретный проект для реализации и вы хотите знать, подходит ли он?

С уважением,

Ответ 2

Есть две модели 3D-графики: 1. Подход к трубопроводу или бесконечному циклу (3D-игры, Жесткий уровень 3D-системы Cad с 100 000 и более объектами - сетки) 2. Умная абстрактная модель WPF3D с классической поддержкой OOP без каких-либо методов OnDraw, OnPaint. Очень важно правильно использовать методы Media3D для WPF. Поэтому самое важное - без OnDraw, OnPaint.

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

Это не так правильное мнение о WPF 3D, как для самого простого приложения, но для полностью управляемых объектов ООП. Например, посмотрите на скриншоты на моем сайте TIMO Structural CAE

Это полностью управляемое приложение 3D WPF.

Ответ 3

Если вы действительно хотите сделать что-то сложное, вам лучше использовать установленный графический движок (как правило, разработанный для игр), а не напрямую использовать DirectX или OpenGL. 3D-движок WPF обеспечивает аналогичный уровень абстракции, хотя он имеет значительно меньший набор функций (вам все равно придется работать довольно сложно, если вам нужны тени, отражения, преломления, карты рельефа, скелетная анимация и т.д.)

Тем не менее, я успешно использовал его для визуализации собственного 3D-симулятора, и это более чем адекватно для моих нужд. Он неплохо работает даже с переполненной сценой, и для обеспечения достаточной освещенности геометрии достаточно базовой подсветки. Было также довольно легко получить работу, что является большим плюсом в моей книге (у нее не было много времени для инвестиций в разработку визуализации.)

Ответ 4

Если по WPF 3D вы имеете в виду способность отображать аппаратную ускоренную 3D-графику, тогда я бы сказал "да". Если, однако, вы имеете в виду WPF 3D framework; то у меня возникнет соблазн сказать "нет".

Я не использовал много 3D-фреймворков WPF, но из того, что я использовал, я нашел, что он задействовал много жестко закодированных точек. При этом, вероятно, есть способы обойти это, но я вообще не думаю, что структура была когда-либо построена с использованием передовой 3D-графики (например, инструментов моделирования и игровых движков).

Однако, я нашел, что это хорошо, отображает 3D-рендеринг контента и плавно интегрирует визуализированный контент с его системой составления пользовательского интерфейса. Я широко использовал WPF таким образом, как хост приложения для рендеринга и управления 3D-контентом - в частности, с точки зрения контекста трехмерного моделирования.

В таких ситуациях вы можете использовать элемент управления D3DImage, встроенный в приложение WPF, чтобы позволить DirectX-контент отображаться непосредственно в приложении, Вы можете выполнить рендеринг на этой поверхности с помощью самого DirectX или управляемой оболочки, такой как SlimDX. Последнее из которых я нашел очень хорошим, так как поддерживает DirectX версии 9, 10 и 11, и это довольно тонкая оболочка, поэтому многие API DirectX можно использовать практически так же.

В целом, я бы сказал, что это полностью зависит от вашего требуемого использования 3D-системы.

Ответ 5

Хотя ответ, конечно, зависит. Я буду смелым и скажу, что WPF 3D отлично подходит для обучения, простых потребностей и интеграции 3D в другое 2D-приложение.

Поскольку вы рассматриваете WPF, я предполагаю, что вы смотрите на использование С# для записи того, что устанавливается в Windows. В дополнение к тому, что рекомендуют другие, я предлагаю взглянуть на XNA, который не является частью WPF, но подмножество которого доступно в Silverlight 5 (если вы хотите придерживаться XAML).

Я запрограммировал в OpenGL с C, DirectX в С++ и Managed DirectX (obsolte) и WPF 3D. WPF 3D обеспечивает очень высокий уровень абстракции, предоставляет множество удобных функций и подходит для некоторых приложений. Я использовал его в прошлом в приложении, которое сочетало 2D и 3D-графики, и оно хорошо работало для этого приложения. В этом случае я нуждался в произвольных плоскостях отсечения, что было недоступной функцией, и было проще вручную выполнить обрезку, чем использовать другой API, который предоставил эту функцию, но не имел большого удобства на высоком уровне.