2016-03-24 3 views
0

Мне нужно нарисовать тысячи 3D-строк в секунду для промышленного WPF-приложения, но WPF, похоже, не имеет родной HW-ускоренной линии.Аппаратные ускоренные 3D-линии в WPF

Под «3D» Я имею в виду, они могут быть повернуты в 3-м осям, как показано в перспективе и т.д. Под «линии» я имею в виду только что - это не каркасные 3D-объекта, так что я не хочу tesselation 3D-поверхности, и я делаю не хочу, чтобы они горели или затенены.

Варианты этого вопроса были заданы ранее в StackOverflow. Люди предложили:

  • XNA, но XNA осуждается
  • Helix3D, но его линия имеет странные, неприемлемые артефакты рендеринга
  • OpenGL (например, OpenTK или SharpGL), но у меня было много дискуссий с люди на форумах OpenGL и все интерфейсы OpenGL с WPF, похоже, имеют серьезные проблемы, связанные с другими функциями WPF, и требуют, чтобы хаки работали.

Я думаю, что мой лучший выбор - использование DirectX или Direct3D. Но я не знаю, как их интегрировать с WPF. Также Direct3D также не имеет примитива нативной линии (он использует текстурированные треугольники): https://msdn.microsoft.com/en-us/library/windows/desktop/bb323719%28v=vs.85%29.aspx

При необходимости я готов выполнять 2D аппаратные ускоренные линии и выполнять собственное 3D-2D-отображение.

Но самое главное, что это должно интегрировать гладко с WPF, так что я могу наложить графики с прозрачным WPF Canvas, на котором я могу рисовать маркеры, текст, ROI-х и т.д.

Как мне это сделать?

ответ

1

Direct3D может рисовать однопиксельные линии изначально или без освещения с или без текстурных картинок. То, что Direct3D не может нарисовать наивно, - это «стилизованные линии» с красящимися краями и т. Д. Direct2D может нарисовать стилизованные линии либо путем испускания текстурных треугольников, либо с помощью растеризации программного обеспечения.

deprecated D3DX9 функциональность для рисования «стилизованных линий», что используется legacy Managed DirectX 1.1Microsoft.DirectX.Direct3D.Line класса используется текстурированных треугольников именно поэтому MSND упоминает, что. Direct2D гораздо более продвинутый и имеет пути ускорения HW.

WPF предоставляет D3DImage класс для Interop с Direct3D, хотя он поддерживает только Direct3D9/Direct3D9Ex. Вы можете использовать общие приемы DXGI для работы с DirectX 11. См. this article, в котором рассказывается, как это сделать с Direct3D 10. Direct3D 11 - это то же самое.

Проект WPFDXInterop на GitHub должен быть полезным, поскольку он реализует класс D3D11Image.

Для C# interop DirectX наилучшими вариантами являются либо SharpDX, либо SlimDX.

+0

Существуют ли в Direct3D9 «однопиксельные линии изначально или без подсветки с или без текстурированных растровых изображений»? Если да, то есть причина не просто использовать D3DImage? Если WPF уже имеет класс D3DImage, зачем мне SharpDX или SlimDX? – user316117

+0

Согласно [this] (http: // stackoverflow.com/questions/19480373/sharpdx-render-in-wpf) SharpDX устарел. – user316117

+0

Прочтите его более осторожно: [Набор инструментов SharpDX] (https://github.com/sharpdx/Toolkit) устарел, а не [SharpDX] (http://sharpdx.org/). SharpDX Tool Kit может быть вам полезен, но вы можете напрямую использовать сборки SharpDX. –

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