【问题标题】:Hardware accelerated 3D lines in WPFWPF 中的硬件加速 3D 线条
【发布时间】:2016-03-31 14:47:56
【问题描述】:

我需要为工业 WPF 应用程序每秒绘制数千条 3D 线,但 WPF 似乎没有本机硬件加速线功能。

“3D”是指它们可以在 3 个轴上旋转,以透视图显示等。“线”是指 - 这些不是 3D 对象的线框,所以我这样做 想要一个 3D 表面的镶嵌,我确实想要这些被照亮或被遮蔽。

之前在 StackOverflow 上已询问过此问题的变体。人们建议:

  • XNA,但 XNA 已弃用
  • Helix3D,但它的线条有奇怪的、不可接受的渲染伪影
  • OpenGL(例如,OpenTK 或 SharpGL),但我在 OpenGL 论坛上与人们进行了很多讨论,并且所有带有 WPF 的 OpenGL 接口似乎都存在与其他 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 画布覆盖图形,我可以在上面绘制标记、文本、ROI 等。

我该怎么做?

【问题讨论】:

    标签: wpf 3d directx direct3d hardware-acceleration


    【解决方案1】:

    Direct3D 可以在有或没有光照的情况下本机绘制单像素线,有或没有纹理映射位图。 Direct3D 不能天真地绘制带有樟脑边缘的“样式线”等。Direct2D 可以通过发射纹理三角形或使用软件光栅化来绘制样式线。

    legacy Managed DirectX 1.1Microsoft.DirectX.Direct3D.Line 类使用的用于绘制“样式线”的deprecated D3DX9 功能使用了带纹理的三角形,这就是 MSND 提到这一点的原因。 Direct2D 更先进,并且具有硬件加速路径。

    WPF 为与 Direct3D 的互操作提供了 D3DImage 类,尽管它仅支持 Direct3D9 / Direct3D9Ex。您可以使用 DXGI 共享表面技巧使其与 DirectX 11 一起使用。请参阅this article,它会告诉您如何使用 Direct3D 10。Direct3D 11 也是如此。

    GitHub 上的 WPFDXInterop 项目应该会有所帮助,因为它实现了 D3D11Image 类。

    对于 DirectX 的 C# 互操作,最好的选择是使用 SharpDXSlimDX

    【讨论】:

    • Direct3D9 中是否存在“带或不带光照、带或不带纹理映射位图的单像素线”?如果是这样,有什么理由不只使用 D3DImage 吗?如果 WPF 已经有一个 D3DImage 类,我为什么需要 SharpDX 或 SlimDX?
    • 根据this SharpDX 已被弃用。
    • 请仔细阅读:SharpDX Tool Kit 已弃用,而不是 SharpDX 本身。 SharpDX Tool Kit 可能对您有用,但您可以直接使用 SharpDX 程序集。
    猜你喜欢
    • 2010-09-22
    • 2011-01-11
    • 2014-03-16
    • 1970-01-01
    • 2011-06-05
    • 2012-11-04
    • 1970-01-01
    • 2011-03-10
    • 2015-11-29
    相关资源
    最近更新 更多