WPF 3D和Helix 3D工具包图形,在一个视口中具有~500,000个三角形 - 优化

时间:2013-04-18 17:38:50

标签: wpf optimization graphics 3d helix-3d-toolkit

我是新的堆栈溢出和3D图形编程的新手。我被赋予了创建应用程序的任务,该应用程序将读取数据(目前我正在从分隔的文本文件中读取,但最终将从数据数组中读取)并以图形方式显示3D数据。数据是从扫描日志的3D扫描仪读取的x,y,z坐标。我需要从4个不同的角度在屏幕上显示这些日志的3D表示。我正在将数据读入二维Point3D数组,然后使用它在HelixViewport3D中创建3D模型。我使用嵌套的for循环来检查数组中的数据点是否在某个x,Z范围内 - 如果它们是我需要从该数据中创建一个三角形。一旦整个数组通过,我将Model3DGroup添加到我的视口的子节点:

topModel.Content = topGroup;
this.mainViewport.Children.Add(topModel);

这需要大约8秒才能完成,并且屏幕上的所有这些数据(大约500,000个三角形)的变焦,平移,旋转都非常慢。有没有办法提高WPF 3D图形的性能?我实际上不需要在完成的应用程序中缩放/平移/旋转,但它有助于调试。最终的应用程序将简单地从不同的方面静态地显示4种不同的方式。但是,我需要能够读取数据并在1-5秒内显示图形。非常感谢任何帮助,我希望我的问题相当清楚!

编辑:在进行了一些深入挖掘顶点缓冲之后,这就是我需要做的事情。我使用的方式太多了。如果有人能指出我在c#中进行顶点/索引缓冲的一些文献,我们将不胜感激!

2 个答案:

答案 0 :(得分:3)

我已经解决了这个问题。感谢输入Capt Skyhawk!你说你怀疑这是WPF3D的缺点让我看到了正确的位置。我的问题是我写这个的方式使每个三角形都有自己的ModelVisual3D !! 我重新编写代码只包含3个GeometryModel3D(sp?)对象,并且所有三角形都放在MeshGeometry3D中然后网格用于创建模型。这使得模型呈现在< 0.1秒我现在有一个新问题 - 出于某种原因,我的视口中只有大约一半的三角形出现在模型中。我不知道为什么,虽然可能是我的网格中有太多的Point3D点或太多的三角形索引。

答案 1 :(得分:1)

我怀疑这是WPF3D的一个缺点。这很可能是加载过程。解析具有500,000个三角形(甚至更多点!)的文本文件是花费大量处理时间的地方。

如果在8秒内没有加载文本文件,则表示非常错误。

您使用的是索引缓冲区吗?如果没有,你就会用很多顶点拍摄自己的脚。