WPF中的线框渲染

时间:2012-10-07 03:14:15

标签: wpf 3d

我必须在一个大型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库可以做到这一点?

提前致谢。

3 个答案:

答案 0 :(得分:3)

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

编辑:哦是的,由于某种原因,SlimDX在下载中没有他们的样本,但是如果你下载它们的源代码就有样本。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我看到很多回复提到第三方解决方案来解决这个问题。

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

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

可选择将中心孔填充为黑色的新构面(组中单独的Model3D),并隐藏线条。

对于小平面中的三个点,A0,B0和C0,计算AB,AC和BC的中点。新点A1沿着BC线的1/20。重复下两个点B1和C1。

'line'的6个新方面由以下组合表示:

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

将A1,B1和C1添加到隐藏线移除变体的另一个模型中。