我需要绘制数千条3D线每秒为工业WPF应用程序,但WPF似乎没有本地HW加速线功能。
所谓" 3D“,我的意思是,它们可以在三个轴上旋转,以透视等方式显示。我的意思是,这些不是3D物体的线框,所以我想要,而不是,想要三维表面的拼接,而不是,而不是,想要这些光线或阴影。
这个问题的变化以前曾在StackOverflow上被问过。人们建议:
我认为我最好的选择是使用DirectX或Direct3D。但我不知道如何将它们与WPF集成。另外,Direct3D也没有原生的线条基元(它使用纹理三角形),请参阅:https://msdn.microsoft.com/en-us/library/windows/desktop/bb323719%28v=vs.85%29.aspx
如果有必要,我愿意做2D硬件加速线,并做我自己的三维-2D映射。
但最主要的是,这必须与WPF顺利地集成,这样我就可以用透明的WPF画布覆盖图形,在此画布上可以绘制标记、文本、ROI等。
我该怎么做?
发布于 2016-03-24 17:43:02
Direct3D可以在有或没有纹理映射位图的情况下本地绘制单像素线。Direct3D不能天真地绘制带有凸现边缘的“样式线”,Direct2D可以通过发射纹理三角形或使用软件栅格化来绘制样式线。
不推荐的D3DX9用于绘制由遗留托管DirectX 1.1
Microsoft.DirectX.Direct3D.Line类使用的“样式线”的功能使用了纹理三角形,这就是MSND提到这一点的原因。Direct2D要先进得多,并且有高质量的加速路径。
WPF提供了用于与D3DImage互操作的Direct3D类,尽管它只支持Direct3D9 / Direct3D9Ex。您可以使用DXGI共享表面技巧使其与DirectX 11一起工作。参见这篇文章,它告诉您如何使用Direct3D 10。Direct3D 11是相同的。
WPFDXInterop项目在GitHub上应该很有用,因为它实现了一个D3D11Image类。
对于C#互操作的DirectX,最好的选择是使用SharpDX或SlimDX。
https://stackoverflow.com/questions/36204923
复制相似问题