3D in WinForms?

本文关键字:WinForms in 3D | 更新日期: 2023-09-27 18:02:20

如何在WinForms中使用3D视图?

我应该使用XNA吗?

我找到了这个教程:http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1

但我不明白我怎么能添加只是ContentLibrary和内容到我的WinForms项目。

或者可以使用Scaleform GFx吗?半2d还是3D

3D in WinForms?

没有办法直接从标准的Visual c#项目中引用XNA内容项目(就像你可能使用默认的WinForms模板一样)。

你必须做的是创建一个XNA"Windows Game Library"项目(甚至是一个空的),然后使用该项目上的"Add Content Reference"选项添加一个引用到你的XNA内容项目。(这个模板叫做"空内容项目"。)然后将这个新的Game Library项目的引用添加到你的WinForms项目中。

或者没有什么可以阻止你创建一个"Windows游戏"项目,然后使用"添加表单"-这将添加一个空白表单和所需的汇编引用。你必须将XNA模板Game1.csProgram.cs替换为标准WinForms项目中的Program.cs(或查看"WinForms 1"示例使用的内容)。

有关动态内容加载,请查看"WinForms 2"示例

我建议使用OpenTK的GL控件- OpenTK WinForms控件。这是跨平台的,易于使用,并基于OpenGL;它是跨平台和兼容的。没有"黑客"需要得到这个工作,这是一个非常直接的方式在WinForms容器中嵌入3D内容。OpenTK是根据LGPL授权的,这意味着您可以将其嵌入到商业应用程序中。OpenTK/OpenGL目前适用于Linux、Mac和Windows,是我所知道的在。net或Mono应用程序中嵌入3D内容的最简单方法。我尝试过在WinForms中使用XNA方法,结果有点令人困惑,而且完全不跨平台。然后他们发布了XNA 4,我之前的XNA应用程序与新版本完全不兼容。在OpenGL中你不会像在DirectX中那样经常发现这个问题。

使用WPF。你可以混合搭配这些形式。WPF有一个winforms容器,您可以将其放入窗口并填充它。但是,您可以使用WPF开箱即用,只需稍作教育-提示=使窗口固定大小或调整大小将冲洗您的控件。做到这一点很难。

然后在你想要3d效果的地方放一个wpf面板。从网上剪切和粘贴3d wpf代码。

您可以使用一些库。IDWMaster提到了OpenTK,这是一种选择(OpenGL,所以你的情况可能会有所不同;我不是超级粉丝)。

如果你想使用DirectX,就像你标记的问题一样,还有几个选项。微软曾经提供Managed DirectX,但现在已经被XNA取代了。SlimDX是DirectX库的一个更现代的包装器,暴露了它们的大部分功能(但确实有一些性能成本)。SharpDX也可用,我相信它应该比SlimDX快一些,但我没有用过。

你也可以直接使用一些DirectX api,使用COM互操作。c#和。net支持与COM组件(包括本地组件)进行很好的互操作。您将不得不处理大量的IntPtr,并且可能必须进行一些手动封送处理,但是IDirect3DDevice没有太多会引起麻烦的方法(IIRC)。