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

Wpf 对XNA感到困惑(它只是一个Direct3D包装器吗?),wpf,xna,Wpf,Xna,我编写了一个工业C#/WPF应用程序,需要渲染数千条3D线条。(注意:这些不是线框-它们不一定代表3D曲面,因此我不想将多边形细分为三角形,也不想进行明暗处理,但我想进行硬件加速)我一直在看OpenGL和Direct3D,但我一直在看XNA建议的堆栈溢出,例如 我试着去理解它,但我还是很困惑。它只是我应该直接使用的东西的包装器吗,比如Direct3D?它能让我访问底层的图形API吗?它甚至能做台词吗?我可以在WPF对象(如面板或画布)中运行它吗 它只是我应该直接使用的东西的包装器吗,比如Dire

我编写了一个工业C#/WPF应用程序,需要渲染数千条3D线条。(注意:这些不是线框-它们不一定代表3D曲面,因此我不想将多边形细分为三角形,也不想进行明暗处理,但我想进行硬件加速)我一直在看OpenGL和Direct3D,但我一直在看XNA建议的堆栈溢出,例如

我试着去理解它,但我还是很困惑。它只是我应该直接使用的东西的包装器吗,比如Direct3D?它能让我访问底层的图形API吗?它甚至能做台词吗?我可以在WPF对象(如面板或画布)中运行它吗

它只是我应该直接使用的东西的包装器吗,比如Direct3D

XNA不是DirectX的1:1

虽然XNA在幕后使用DirectX,但将其视为DirectX的“包装器”通常是不正确的。XNA做了一些DirectX没有做的事情,比如内容管道;明确定义的独立游戏循环和抽签点;内容加载和卸载回调;和2D精灵。(微软一度放弃了二维绘图DirectDraw,直到现在才发布了Direct2D)

XNA由一系列层组成,从最低的平台开始,包括Direct3D 9等API;XACT;还有辛普特

在平台上构建,您将发现核心框架;扩展框架;抽象的游戏;封装较低的层,同时添加新功能,使“游戏开发更容易”。[1]

到目前为止,最终结果已从DirectX中删除(可能着色器除外),您可能不知道您正在使用DirectX。与DirectX的页面和代码页面相比,您可以在几行代码中打开并运行一个游戏窗口

它能让我访问底层的图形API吗

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

它甚至能做台词吗

我可以在WPF对象(如面板或画布)中运行它吗

。我应该指出,WPF已经是硬件加速的,并且使用DirectX进行渲染。甚至在WPF中看到的阴影效果实际上也是DirectX GPU着色器

今天 正如您可能已经读到的,XNA已被弃用,尽管Monogame处于活动状态,但它与XNA并非100%兼容(只需查找有关XNA内容管道问题的许多文章即可)

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

更多
[1] Cookiecups,“”,MSDN博客

I和许多其他人都发布了关于堆栈溢出的问题,询问如何使用WPF以硬件加速的方式绘制3D线条,一致认为WPF没有这种能力。大多数解决方案似乎涉及到创建非常薄的多面体来模拟直线,许多形式化的解决方案,例如螺旋,已经被证明会产生奇怪的工件。如果可以在WPF中绘制3D线条,请您链接到一个示例?@user316117“使用WPF以硬件加速的方式绘制3D线条,人们的共识似乎是WPF没有这种能力”-他们可能是不正确的。"". WPF已经在幕后使用DirectX,您甚至可以创建自己的着色器,以便在标准WPF应用程序中使用。按照提供的链接查看example@user316117需要注意的一点是,WPF(包括WinForms)的本质是,它们都不是为制作游戏而设计的。这并不意味着你不能,这取决于你比赛的性质。然而,至少XNA和WPF都是硬件加速的,但只有XNA允许您的游戏循环全速运行,因为我怀疑不存在消息泵。