4

这是我必须做的:

要构建一个类似于 CAD 的应用程序,从文件中加载点云(即代表 3D 对象的数千个 3D 点),允许用户操作点(即通过移动点来改变形状),需要进行大量计算点上的点(例如寻找线与面的交点,检测点在面的上方或下方等,测量点之间的距离,或点到曲面等),然后将修改后的点保存到文件中。

它还提供类似 CAD 的基本 UI 功能,例如放大/缩小、平移视图、旋转相机等。

速度是主要问题。

我不想为矩​​阵运算编写自己的函数并定义自己的点/线/面类,而是想使用现有的库/API 来完成这项工作。

我知道 WPF、XNA 和 SlimDX 提供了 API 来进行 3D 几何计算,它们最终都调用了 DirectX,但我只是它们的新手。我在想:

  1. 哪一个(或其他一些建议)可以提供更好的速度性能。

  2. 我对 DirectX 的 3D 功能的理解是它主要处理游戏图形/屏幕输出,是否也适用于数据级计算(即使用 3D 功能来操作点数据,计算距离等,但不输出它屏幕)?合适,我的意思是如果我创建数千个 DirectX 顶点并对其进行维护,它会比使用我自己的数据类型和结构慢得多吗?如果我的理解有误,请纠正我。

  3. 如果我使用 WPF,我是否也需要使用 XNA?我有点把这两件事混为一谈。

  4. 该应用程序应该在没有强大游戏显卡的研究实验室的PC上运行,所以这是否意味着XNA不是首选?

  5. 关于此应用程序应使用技术的建议?

谢谢!!

========更新

为了更清楚,该应用程序将加载约 108,000 个 3D 点,每个点将与其他相邻点形成表面,因此所涉及的 3D 表面数量大致相同(我不会同时生成它们)。我会用点和曲面做很多 3D 几何和矩阵计算,例如交集、插值、变换等,所以“计算”的速度是我主要关心的问题。大多数时候我只会将最终结果绘制到屏幕上,并且绘制主要是线条和点,“绘制”的速度并不是一个大问题。所以它不是一个真正的图形密集型应用程序,而是一个几何计算密集型应用程序。

看完答案和评论后,我想到了两个选择:

  1. 使用原始数据类型存储和计算数据,并在屏幕上绘制数据时将数据转换为 WPF/XNA/SlimDX 数据结构,或

  2. 使用这些 API 的数据结构来存储、计算和绘制所有这些点。

哪一个更好?

4

3 回答 3

7
  1. Honestly, if performance is your primary concern I would go with the API that gets you closest to the hardware. Less obfuscation = more speed. In that case, from the choices you've provided, SlimDX is the best option, followed by XNA, and lastly, WPF.
  2. No, DirectX must use efficient data structures and algorithms. Think about it-- would games that utilize DirectX be able to run at a suitable framerate if all DirectX calculations were inherently slow?
  3. No, WPF and XNA are mutually exclusive. WPF is a framework for creating responsive and intuitive user interfaces. XNA, on the other hand, is a framework for creating games.
  4. Not necessarily. What it actually means is that WPF is not preferred, as WPF will offload a lot of work to compatible video cards. If WPF is unable to find a suitable video card, the CPU will take that work instead, resulting in poor performance.
  5. As I said before, for a graphics-intensive application such as the one you have described, the closer you can get to the hardware is the better. Native DirectX or SlimDX are good options.
于 2011-06-10T20:05:51.403 回答
0

您是否考虑过将功能开发为现有 CAD 环境的插件?例如,AutoCAD 有一个非常强大的 c++ sdk (ObjectARX),它还提供了一个托管的 .NET API。您可以使用 c# 和 WPF 来开发您的扩展。它具有您可以重复使用的现有几何库。当然 AutoCAD 有它的价格,但也有其他选择。例如 BricsCAD。我不确定 BricsCAD 是否提供 .NET api。

从头开始开发应用程序需要数周甚至数月的时间。如果我要将您的功能开发为 AutoCAD 插件,我需要一天的时间。

考虑一下您是否真的需要推出自己的“CAD”环境。

于 2011-06-11T03:49:48.827 回答
0

几周前,我检查了 XNA 的限制。我想知道引擎能够处理多少广告牌(GPU 加速)。结果:纯 XNA:350k 广告牌 XNA 作为 WPF 中的渲染上下文:100k 广告牌

我真的不知道为什么渲染到 WinFormHost 控件时引擎会变慢。一些调试显示,GraphcisDevice.Present()

于 2011-10-26T22:12:38.150 回答