在CryEngine 3中运行Qt GUI

时间:2013-06-08 21:57:41

标签: qt cryengine

我刚开始使用Qt和cryengine,我想在cryengine中运行Qt GUI应用程序。我正在使用带有Qt插件的Visual Studio 2010进行编程。我有cryengine源代码和我在同一解决方案中编译的Qt GUI源代码。但是,我不确定如何在代码中实际运行Qt GUI。

有人能举例说明我可以用来运行Qt GUI的一段代码吗?为了清楚起见,我的Qt项目包括一个main.cpp,一个标题,另一个.cpp和一个.ui文件。我可以使用其中任何一个来运行GUI,还是需要运行编译时生成的实际.exe?

由于

1 个答案:

答案 0 :(得分:0)

老实说,我不知道Qt是如何工作的;但假设Qt能够渲染图像,你可以利用它来以一种稍微笨拙的方式进行渲染:

  • 在沙盒编辑器中准备一个简单的材质(一个材质图层,Illum着色器,只是漫反射贴图 - 任何)
  • 将Qt UI渲染到内存中的图像(实际上只是像素数组/流)
  • 将“图像”传递给CryEngine
  • 在CryEngine中找到您的素材,克隆它并将图像设置为漫反射贴图。
  • 直接将其渲染到屏幕

您甚至可以使用该方法模拟Scaleform的3D功能:

  • 创建EntityFlashTag的副本 当您现在需要3D UI元素时,您可以:
  • 新实体的产生和实例
  • 设置UI素材(带有渲染的Qt UI的图像)并将其应用于您的实体实例
  • 缩放并调整实体位置

你应该能够在GameDll中做所有与CryEngine相关的事情 - 但遗憾的是我现在不能给你代码片段(可能会在以后这样做)。 此方法还有一个很大的缺点:您必须自己实现整个UI交互。


否则,如果您希望Qt UI真正位于CryEngine之上并拥有“完整”CryEngine源代码,则可以在Qt应用程序中托管CryEngine。对于该方法,您必须创建一个Qt小部件作为CryEngine的容器,并强制该小部件具有本机句柄(您可能希望查看以下链接:Force QWidget Child to have its own Window Handle)。然后在初始化引擎时使用该句柄(您可能希望查看PC Launcher代码以及GameDll中的游戏启动相关代码)。有了这个,您可以将UI的其余部分设计为位于引擎窗口小部件之上(只需添加元素而不将它们添加到布局中就足够了 - 即使您必须手动定位它们)


可能仍然有更好的方法,通过在CryEngine中真正“托管”Qt,但我不知道,如何做到这一点。