0

我计划在 WPF 中嵌入一个非托管的 C++ OpenGL 查看器。要求是(除了健壮性和易于开发)

  • 适当调整大小
  • OpenGL 查看器区域的上下文菜单(仅适用于查看器相关操作)
  • 事件(例如,通过在 OpenGL 查看器中选择对象触发)
  • WPF 对话框应绘制在 OpenGL 空间之上

到目前为止,我已经找到了一些关于使用托管 WinForm 控件(通过 C++/CLI 包装器)的博客和讨论,但是要完成我的所有上述要求(如果可能的话)似乎有点棘手(甚至有点小技巧)。

如何创建一个 ActiveX 控件?尽管没有创建 ActiveX 控件的经验,但其优势之一是它可以在自己的进程中运行。

这是一个好主意还是我会遇到更多的修补?

编辑:我应该更清楚 OpenGL 查看器。这是一个基于 C++ 3D 引擎的现有应用程序,仅支持 OpenGL。移植到支持 DirectX 的引擎被认为是最后的手段。

4

2 回答 2

1

虽然我没有使用 ActiveX,但我已经完成了我相信您正在努力实现的目标。两条信息帮助我走上了这条路。

  1. 混合托管和非托管代码

    • 事实证明,托管 C++ 的编译方式与非托管 C++ 完全不同,并且数据存储在完全不同的堆上。幸运的是,您可以使用...将代码段标记为托管或非托管...

    #pragma managed
    #pragma unmanaged

  2. OpenGL上下文管理

    • 我遵循了类似于本文中描述的方法
    • 如果您需要管理多个 OpenGL 窗口,wglMakeCurrent 和 wglShareLists 将是您的伙伴

祝你好运!

于 2013-03-14T05:39:21.353 回答
1

为什么你想要一个activex?有一些基于 PInvoke 的托管包装器,因为SharpGL可以完成您需要 easyear 的工作。而且,既然你正在使用 WPF 并且你有一个Viewport3d对象,为什么不使用它呢?如果您熟悉 3d 引擎,您会欣赏这种简洁性(即使在速度方面存在一些缺陷)。

另一点,因为根据这里的这个问题,由于 Opengl 可以使用纯软件模式在会话 0中渲染,我被迫放弃 WPF 3d 渲染以支持 OpenGl 。如果您计划在服务或应用程序的屏幕外位图中呈现某些内容,则这是一项要求asp.net

于 2013-03-14T05:44:33.410 回答