我不得不在一个大的WPF应用程序中编写一个线框3D渲染器,它可以做很多事情,但WPF本身就没有这样的能力。
一些人使用微软的“WPF的3D工具”,特别是它的ScreenSpaceLines3D类。但是在web上,人们抱怨这个类的性能很慢,有各种各样的But,而且这个类库似乎自2007年以来就没有得到过维护!
其他人建议使用Helix3D工具包中的LinesVisual3D类,但显然这也有缺陷( http://helixtoolkit.codeplex.com/workitem/9957 )
Charles Petzold有一个3D库--有人知道它相当健壮吗?
那么我有什么好的选择吗?例如,有没有在WPF窗口中执行OpenGL3D的好方法?有没有其他好的WPF库可以可靠地做到这一点?
提前谢谢。
发布于 2012-10-30 08:22:05
查看SlimDX。XNA和托管DirectX等。已弃用或较旧。可能还要检查一下SharpDX,我已经有一段时间没有检查过它了。我们在.NET中为DirectX使用SlimDX,这是很好的。您可能正在考虑使用SlimDX在WPF互操作的D3DImage上呈现。另一种可能的选择是使用托管的WinForms控件,并使用该控件的句柄与SlimDX进行互操作,这可能会更快,但您会失去一些与WPF的渲染引擎等更容易的互操作。如果您使用D3DImage,它将成为一个ImageBrush,您可以设置为任何东西的背景,您不必担心空域问题等。
编辑:哦,是的,出于某种原因,SlimDX的下载中不再有他们的示例,但如果您下载它,他们的源代码中就有示例。
发布于 2012-10-29 19:41:21
This page似乎有关于使用OpenGL的信息。微软还提到了使用Direct3d和XNA。Direct3d非常容易使用,如果您已经了解OpenGL,那么学习XNA可能不会有太多问题。我承认,当我学习Direct3d的时候,它上的材料没有OpenGL材料好。
发布于 2015-07-10 03:30:49
我已经看到很多回复提到了这个问题的第三方解决方案。
对于纯WPF解决方案,我从现有的Model3D创建一个新的Model3D,其中每个facet创建时都有一个洞。即分成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添加到隐藏线删除变体的另一个模型中。
https://stackoverflow.com/questions/12765841
复制