我需要为工业WPF应用程序每秒绘制数千条3D线,但WPF似乎没有原生的HW加速线功能。
通过“3D”我的意思是它们可以在3个轴上旋转,以透视等方式显示。“线条”我的意思就是 - 这些不是3D对象的线框所以我做不想要3D表面的细分,我不想要这些点亮或阴影。
之前已经在StackOverflow上询问过这个问题的变化。人们建议:
我认为我最好的选择是使用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等。
我该怎么做?
答案 0 :(得分:1)
Direct3D可以在有或没有光照的情况下原生绘制单像素线,有或没有纹理映射位图。 Direct3D不能天真地画出什么样的线条' Direct2D可以通过发射纹理三角形或使用软件光栅化来绘制样式线。
绘制'样式线的deprecated D3DX9功能' legacy Managed DirectX 1.1
Microsoft.DirectX.Direct3D.Line
类使用纹理三角形,这就是MSND提到的那个。 Direct2D更先进,并具有硬件加速路径。
WPF为Direct3D提供了D3DImage
类互操作,但它仅支持Direct3D9
/ Direct3D9Ex
。您可以使用DXGI共享表面技巧使其与DirectX 11一起使用。请参阅this article,它告诉您如何使用Direct3D 10. Direct3D 11是相同的。
GitHub上的WPFDXInterop项目应该有用,因为它实现了D3D11Image
类。