问题 在Visual Studio 2012中使用DirectX


我有一些用C#编写的DirectX项目,我需要专门通过Visual Studio 2012运行。

所有这些项目都使用名为“Microsoft.DirectX”的命名空间。

Microsoft Windows SDK在我的Windows 8计算机上完全成功安装,但是此命名空间仍然无法识别。

我的问题是,“如何使用C#,Visual Studio 2012和MS Windows SDK的组合来运行和开发DirectX应用程序?”


11825
2017-10-11 08:58


起源

Win8 / VS2012仅支持DirectX for C ++(开箱即用)。如果你想使用DirectX,那么C ++就是使用的语言(这就是微软所说的)。无论如何,你想开发什么样的应用程序? Win8的Metro或桌面?兼容Win7吗?你想用什么样的.Net版本?在选择从托管代码调用DirectX的技术/库时,这很重要(Metro有一些限制,较旧的.Net版本可能无法与您的框架一起使用)。 - Beachwalker
...我会尝试SharoDX(API非常相似,您的示例项目应该很容易修改以使用SharpDX)。这也是SlimDX的重点,但是SharpDX更快。 - Beachwalker
现在我真的不需要开发新的应用程序。我想打开这些项目,看看它们是如何工作的。如果我开始开发新应用程序,我可能会使用其中一个包装器。 - Radek Wyroslak


答案:


我建议你去看看 SharpDX。这是对DirectX的精简托管访问,API与非托管版本非常相似(SharpDX是从非托管c ++头文件自动构建的)。 AFAIK这是目前使用DirectX最快的托管方式。

一个非常重要的事情可能是您也能够开发Win8-Metro-Apps。 AFAIK对于其他所有lib都不可能/不允许这样做。我之所以提到这是因为你写了你想要开发/用于Win8,但你没有说过什么样的应用程序。 Metro-Apps比Desktop8 Apps for Win8有更多限制。

如上所述,托管DirectX已过时。但是,自上一版本4发布以来,XNA似乎也不再受到维护。因此,如果你想使用现代DX10或DX11,你会陷入困境,因为XNA使用的是DX9。另一种选择是 ANX框架。该项目目前处于早期开发阶段,但对我来说似乎很有希望。在这种情况下,ANX可以使用DirectX进行渲染并使用SharpDX。与XNA(仅与DirectX9密切相关)相比,SharpDX也能够使用其他渲染器(例如OpenGL for Linux)。


9
2017-10-11 09:21





托管DirectX已过时,不再由Microsoft替换,因为它被替换为 XNA。最新版本支持Managed DirectX 这个 一个(2010年2月发布)。

你也可以给 SlimDX 一试:

SlimDX是一个免费的开源框架,使开发人员能够使用.NET技术(如C#,VB.NET和IronPython)轻松构建DirectX应用程序。它旨在成为一个高效,简单,精益的包装器,完全包含Microsoft的所有游戏和多媒体技术,并将它们暴露给托管代码。所有代码均在MIT / X11许可下,所有内容均在Creative Commons Attribution-Share Alike许可下。我们的最新版本是2011年3月,可以在下载页面上找到用户和开发人员。


3
2017-10-11 09:09



它不确定代码是否真的 管理DirectX 它很可能是 XNA。这个命名空间(这是我们迄今为止唯一的提示)也存在于 XNA。 - bitbonk
我认为它是直接管理X因为这个“我有一些C#DirectX项目”。但正如你所说,也可能是XNA ......除非他提供更多细节我们无法确定。 - Nasreddine


你可能需要 微软XNA


1
2017-10-11 09:10



我可以使用XNA打开这些旧项目吗? - Radek Wyroslak
这取决于 怎么样 它是旧的。你给我们的唯一暗示是 Micorsoft.DirectX 命名空间。我相信这个命名空间在很久以前就已经存在了 管理DirectX 以及在 XNA (现在也有相当的历史)。如果是的话 管理DirectX 你将不得不将其转换为 XNA。如果它已经是 XNA,你将不得不将其转换为最新版本 XNA (可能工作较少)。 - bitbonk
我认为它是Managed DirectX。感谢你的回答。 - Radek Wyroslak
似乎XNA框架的开发也没有多少。 XNA是一种用于游戏(引擎)的基础框架,而Managed DirectX是使非托管DirectX API可直接用于.Net程序员的一种方法=> XNA具有与(托管)DirectX不同(且更简单)的API。 - Beachwalker
那是对的 - bitbonk