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

本文关键字:应用程序 桌面 SlimDX 于类似 CAD WPF XNA | 更新日期: 2023-09-27 17:58:49

这就是我要做的:

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

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

速度是主要问题。

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

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

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

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

  3. 如果我使用WPF,我是否也需要使用XNA?我把这两件事搞混了。

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

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

谢谢!!

=============更新

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

在阅读了答案和评论后,我想到了两个选项:

  1. 商店&使用基元数据类型计算数据,并在屏幕或上绘制数据时将数据转换为WPF/XNA/SlimDX数据结构

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

哪一个更好?

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

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

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

从头开始开发应用程序需要数周甚至数月的时间。如果我要把你的功能开发成一个AutoCAD插件,我会花一天的时间。

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

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

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