7

我必须在一个大型 WPF 应用程序中编写一个线框 3D 渲染器,它可以做很多事情但是 WPF 没有本机能力来做到这一点。

有些人使用 Microsoft 的“3D Tools for WPF”,特别是它的 ScreenSpaceLines3D 类。但是在网上有关于该类性能缓慢和各种错误的抱怨,而且该类库似乎自 2007 年以来就没有维护过!

其他人建议使用 Helix 3D 工具包中的 LinesVisual3D 类,但显然这也是错误的 ( http://helixtoolkit.codeplex.com/workitem/9957 )

Charles Petzold 有一个 3D 库——有人知道它相当强大吗?

那么我在这里有什么好的选择吗?例如,有没有在 WPF 窗口中做 OpenGL3D 的好方法?是否有其他优秀的 WPF 库可以可靠地做到这一点?

提前致谢。

4

3 回答 3

3

查看 SlimDX。XNA 和托管 DirectX 等已弃用或过时。可能还检查 SharpDX 我有一段时间没有检查它。我们在 .NET 中将 SlimDX 用于 DirectX,这很好。您可能正在寻找的是使用 SlimDX 在 D3DImage 上呈现 WPF 互操作。另一种可能的选择是使用托管的 WinForms 控件并使用它的句柄与 DirectX 与 SlimDX 进行互操作,这可能会更快,但您会失去与 WPF 渲染引擎等更容易的互操作。如果您使用 D3DImage,它会变成您可以使用的 ImageBrush设置为任何背景,您不必担心空域问题等。

编辑:哦,是的,由于某种原因,SlimDX 在下载中不再有他们的示例,但是如果您下载它,他们的源代码就有示例。

于 2012-10-30T08:22:04.963 回答
2

这个页面似乎有关于使用 OpenGL 的信息。微软还提到了使用 Direct3d 和 XNA。XNA 非常易于使用,如果您已经了解 OpenGL,那么学习 Direct3d 可能不会有太大问题。我承认,当我学习 Direct3d 时,它上面的材质不如 OpenGL 材质。

于 2012-10-29T19:41:21.003 回答
0

我看到很多回复都提到了这个问题的 3rd 方解决方案。

对于纯 WPF 解决方案,我从现有的 Model3D 创建了一个新的 Model3D,其中每个方面都创建了一个洞。即分成6个新的刻面,每条“线”的宽度与原始刻面大小成正比。

这样做的原因是它看起来比固定线宽更好,但如果需要,您可以使用固定线宽。

可选择将中心孔填充为黑色的新刻面(在组中单独的 Model3D),并且您可以移除隐藏线。

对于刻面中的三个点 A0、B0 和 C0,计算 AB、AC 和 BC 的中点。新点 A1 是沿 BC 线的 1/20。对接下来的两个点 B1 和 C1 重复此操作。

“线条”的 6 个新方面由以下组合表示:

A0, B0, B1
A0, B1, A1
A0, C1, C0
A0, A1, C1
B0, C0, C1
B0, C1, B1

将 A1、B1 和 C1 添加到另一个模型以用于隐藏线移除变体。

于 2015-07-10T03:30:48.670 回答