c# - WPF、XNA、SlimDX ... 对类似 CAD 的桌面应用程序的建议? (C#)

标签 c# wpf xna directx slimdx

这是我必须做的:

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

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

速度是主要问题。

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

我知道 WPF、XNA 和 SlimDX 提供了进行 3D 几何计算的 API,它们最终都调用了 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 的数据结构来存储、计算和绘制所有这些点。

哪个更好?

最佳答案

  1. 老实说,如果表现是你的 我最关心的是 让您最接近 硬件。 更少的混淆=更多 速度。 在这种情况下,从 您提供的选择,SlimDX 是最好的选择,其次是 XNA, 最后是 WPF。
  2. 不,DirectX 必须使用高效的数据结构和算法。想一想——如果所有 DirectX 计算本来就很慢,那么使用 DirectX 的游戏是否能够以合适的帧速率运行?
  3. 不,WPF 和 XNA 是互斥的。 WPF 是一个用于创建响应迅速且直观的用户界面的框架。另一方面,XNA 是用于创建游戏的框架。
  4. 不一定。它实际上意味着 WPF 不是首选,因为 WPF 会将大量工作卸载到兼容的视频卡上。如果 WPF 无法找到合适的视频卡,CPU 将接管该工作,从而导致性能不佳。
  5. 正如我之前所说,对于像您所描述的那样的图形密集型应用程序,您离硬件越近越好。 native DirectX 或 SlimDX 是不错的选择。

关于c# - WPF、XNA、SlimDX ... 对类似 CAD 的桌面应用程序的建议? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310758/

相关文章:

c# - LINQ to XML 不返回任何结果

c# - 发送照片电报 API

c# - 如何将 ObservableCollection<LineSeries> 绑定(bind)到图表

xna - 什么是最好的 XNA 博客?

c# - 类初始化错误

c# - Winform变得不响应,异步编程,C#

c# - WPF:双向绑定(bind)始终更新 - 单向绑定(bind)仅更新一次

wpf - 在文本框功能中提供按钮,不使用自定义控件但覆盖文本框模板

windows-phone-7 - WP7 上 XNA 的广告控制

c# - 从 HRESULT : 0x8004503A in Speechlib 获取异常