【问题标题】:Confused about XNA (is it just a Direct3D wrapper?)对 XNA 感到困惑(它只是 Direct3D 包装器吗?)
【发布时间】:2016-02-17 09:48:51
【问题描述】:

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

我去了https://en.wikipedia.org/wiki/Microsoft_XNA 试图理解它,但我仍然感到困惑。它只是我应该直接使用的东西的包装器,比如 Direct3D?它是否让我可以访问底层图形 API?它甚至可以做线条吗?我可以在面板或画布等 WPF 对象中运行它吗?

【问题讨论】:

    标签: wpf xna


    【解决方案1】:

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

    XNA 不是 DirectX 的 1:1。

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

    XNA 由一系列层组成,从 Platform 开始是最低的,并且包括 API,例如 Direct3D 9; XACT;和 XInput。

    基于平台,您会发现核心框架;扩展框架;以及抽象的游戏;封装较低层,同时添加新功能,从而“让游戏开发更容易”。 [1]

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

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

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

    它还能做台词吗?

    是的。

    我可以在面板或画布等 WPF 对象中运行它吗?

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

    今天

    您可能已经阅读过,XNA 已被弃用,尽管 Monogame 活动 与 XNA 并非 100% 兼容(只需查找关于 SO 上有关 XNA 内容管道问题的许多帖子即可)。

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

    更多

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

    【讨论】:

    • 我和许多其他人在 Stack Overflow 上发布了有关使用 WPF 以硬件加速方式绘制 3D 线条的问题,而共识似乎是 WPF 没有这种能力。大多数解决方案似乎都涉及创建非常薄的多面体来模拟线条,并且许多形式化的解决方案,例如 Helix,已被证明会产生奇怪的伪影。如果可以在 WPF 中绘制 3D 线,您能否链接到一个示例?
    • @user316117 “使用 WPF 以硬件加速的方式绘制 3D 线,而共识似乎是 WPF 没有这种能力” - 他们是不正确的。 The 3-D functionality in Windows Presentation Foundation (WPF) enables developers to draw, transform, and animate 3-D graphics in both markup and procedural code。 WPF 已经在幕后使用 DirectX,您甚至可以创建自己的着色器以在标准 WPF 应用程序中使用。按照提供的链接查看示例
    • @user316117 有一点需要注意,包括 WinForms 在内的 WPF 的本质是它们都不是为制作游戏而设计的。现在这并不意味着您不能,这仅取决于您的游戏的性质。但是,至少 XNA 和 WPF 都是硬件加速的,但只有 XNA 允许您的游戏循环以全油门运行,因为我怀疑不存在消息泵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多