1

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

4

2 回答 2

3

I have solved this issue. Thanks for the input Capt Skyhawk! You saying that you doubted this was a WPF3D shortcoming helped me look in the right places. My problem was that the way I wrote this made every triangle it's own ModelVisual3D!! I re-wrote the code to contain only 3 GeometryModel3D (sp?) objects, and all the triangles are placed in a MeshGeometry3D and then the mesh is used to create a model. This made the models render in < 0.1 seconds. I now have a new issue- for some reason only about half of the triangles are showing up in the model in my viewports. I'm not sure why, though it may be that I have too many Point3D points or too many triangle indices in my mesh.

于 2013-04-26T15:07:47.707 回答
1

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

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

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

于 2013-04-18T17:45:06.483 回答