0

我有一个 WPF 应用程序,屏幕的一部分显示了一个需要以 3D 动态呈现的对象,速度可能为 20 FPS。我知道通常 WPF 应用程序会使用 DirectX 进行 3D 渲染。(我也知道 WFP 有一个简化的 3D API,但我认为这不适用于我的情况,因为我有太多的三角形要渲染。)在我的情况下,我想使用 OpenGL,因为很有可能整个应用程序将被移植到非 Windows 机器上,我不想重写 3D 代码。

我看到有人尝试创建一个 OpenGL 可以直接渲染到其中的 WPF 控件,但是它们看起来都太粗糙/太冒险了。

作为一种更安全的方法,我认为我可以使用带有 OpenGL 的 FBO 将帧渲染到屏幕外,然后获取位图并将它们作为常规 2D 图像实时传递给 WPF。

我的问题是关于速度。您是否预计该计划中存在破坏交易的瓶颈?我假设 FBO 渲染将与 OpenGL 端的直接窗口渲染一样快?我希望从渲染的 OpenGL 图像 (FBO) 中提取位图应该很快?我不太确定将这些图像交给 WFP 并看到它们以 20 FPS 的速度更新。

你有具体的经验可以帮助我决定这是否是一个合理的方法吗?

4

1 回答 1

0

我想使用 OpenGL,因为整个应用程序很有可能被移植到非 Windows 机器上

但这意味着你也必须重写整个 WPF 应用程序,因为这个框架不是跨平台的。所以在这种情况下,OpenGL 部分在这里只是次要问题。我认为你应该重新考虑整个 UI 技术。对于例如,我将使用Qt SDK,因为它是真正的跨平台,您可以随意将它与 DirectX 和 OpenGL 连接。但是,如果您打算在 Windows 上坚持使用 WPF 并使用 OpenGL,则只需使用C# OpenGL wrapper。是的,你会得到一些性能开销,因为它是一个包装器。就像那些用于 Java(JOGL,LWJGL)的游戏一样。但是像 MineCraft 这样的游戏最初是由这些 API 编写的并且可以正常工作。另一种更具挑战性的方法是 WPF COM 互操作并调用一些直接从 WPF 包装 OpenGL 渲染器的 C++ 应用程序,甚至可能正在使用不安全模式尽可能降低级别。我自己从未尝试过,但它可能会为您带来更好的性能。但实际上这是很多工作。最后,我建议您使用 DirectX for Windows,因为 WPF 自然与它有最好的集成。如果您的应用程序设计得很好,那么以后将它连接到 OpenGL 后端就不会有问题。

于 2013-01-11T10:06:19.943 回答