对XNA感到困惑(它只是一个Direct3D包装器吗?)

时间:2016-02-16 17:00:41

标签: wpf xna

我有一个工业C#/ WPF应用程序,需要渲染数千条3D线。 (注意这些不是线框 - 它们不一定代表3D表面,所以我不想将多边形镶嵌成三角形,或者照明阴影,但我想要硬件加速)我一直在关注OpenGL和Direct3D,但我一直看到XNA在Stack Overflow上提出建议,例如,herehere

我去https://en.wikipedia.org/wiki/Microsoft_XNA尝试理解它,但我仍然感到困惑。它只是我应该直接使用的东西的包装器,比如Direct3D吗?它是否允许我访问底层图形API?它甚至可以做线路吗?我可以在像Panel或Canvas这样的WPF对象中运行吗?

1 个答案:

答案 0 :(得分:0)

  

它只是我应该直接使用的东西的包装器,比如Direct 3D

XNA不是DirectX的1:1。

虽然XNA使用DirectX,但通常认为它不是正确的"只是DirectX的包装" 。 XNA做了一些DirectX没有做的事情,比如内容管道;一个明确定义的独立游戏循环和绘制点;内容加载和卸载回调;和2D精灵。 (微软放弃2D绘图DirectDraw一段时间,现在才发布Direct2D)

XNA由一系列层组成,以 Platform 为最低层,包括Direct3D 9等API; XACT;和XInput。

在平台的基础上,您将找到核心框架;扩展框架;和游戏哪个摘要;封装较低层,同时添加新功能,使"使游戏开发更容易" 。 [1]

最终结果是从DirectX中移除(除了着色器之外)您不会意识到您正在使用DirectX。与DirectX的页面和代码页相比,您可以在几行代码中启动并运行游戏窗口。

  

它是否允许我访问底层图形API?

如果你的意思是你可以直接与DirectX COM API交谈,那么不,你不能。但是,您可以编写着色器,在编译时,GPU将间接理解。

  

它甚至可以做行吗?

  

我可以在像Panel或Canvas这样的WPF对象中运行吗?

Apparently so。我应该指出WPF 已经是硬件加速并使用DirectX进行渲染。即使你在WPF中看到的那些投影效果实际上也是DirectX GPU着色器。

今天

正如您可能已经阅读过的那样,XNA已被弃用,虽然Monogame 活动与XNA不是100%兼容(只需查看有关XNA Content Pipeline问题的SO上的很多帖子)。 / p>

因此,如果您希望在 WPF中执行3D ,那么您不需要XNA

更多

[1] Cookiecups," what is the xna framework" ,MSDN博客