【问题标题】:WPF 3D and Helix 3D toolkit graphics with ~500,000 triangles in one viewport- optimizingWPF 3D 和 Helix 3D 工具包图形,在一个视口中包含约 500,000 个三角形 - 优化
【发布时间】:2013-04-26 23:07:47
【问题描述】:

我是堆栈溢出的新手,也是 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# 中进行顶点/索引缓冲的文献,将不胜感激!

【问题讨论】:

  • 如果您从预定角度显示静态模型,您不能预渲染模型并显示图像或视频吗?
  • 是的,我可以预渲染数据,然后从中创建位图或其他东西,只要质量不会绝对糟糕。我不知道该怎么做,但谢谢你的好主意——我会考虑的。

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


【解决方案1】:

我已经解决了这个问题。感谢天鹰上尉的投入!你说你怀疑这是 WPF3D 的一个缺点,这帮助我找到了正确的地方。我的问题是我写这个的方式每个三角形都是它自己的ModelVisual3D!我重新编写了代码只包含3个GeometryModel3D(sp?)对象,所有三角形都放在MeshGeometry3D中然后使用网格来创建模型。这使得模型在

【讨论】:

  • 不,您可能只指定了正面材质,因此不会绘制背面三角形。另外:考虑将点放入单个数组并将所有视口绑定到同一个数组。 (对三角形索引和纹理坐标执行相同操作)
  • 不,我确实使用了背面材料。即使我不使用不会成为问题的背面材料。我也为每个模型的点使用一个数组。
【解决方案2】:

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

如果在 8 秒内没有载入文本文件,那就是大错特错了。

您是否使用索引缓冲区?如果没有,那么你就是在用这么多顶点射击自己。

【讨论】:

  • 感谢您的回答。数据解析比将图形显示在屏幕上花费的时间要少得多。与在屏幕上显示图形所需的时间相比,文本文件的加载几乎可以忽略不计。获得数据后大约需要 8 秒。文本文件的数据点实际上比您想象的要少得多,因为给定行中的每个点都具有相同的 Y 坐标,给定列中的每个点都具有相同的 X 坐标,而数据本身就是 Z 坐标。我不认为我正在使用索引缓冲区,我不知道它们是什么并且会调查它。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多