【问题标题】:Exposing Ogre functions using tolua++使用 tolua++ 暴露 Ogre 函数
【发布时间】:2011-10-08 17:58:14
【问题描述】:

我想知道如何公开 Ogre 库函数,例如:俯仰、偏航以旋转相机。我想使用 lua 脚本控制我的应用程序的相机。我正在使用 tolua++ 进行绑定。我为 OgreCamera.h 创建了一个已清理的标头,但显然该函数没有公开,因为当我在 C++ 代码中使用 lua_call 时,程序以退出代码 1 终止。 在我的 lua 脚本中,我编写了 pMyCam:yaw(angle) 语句,其中 pMyCam 的类型为 Ogre::Camera* 并传递给 lua。有问题的陈述是对偏航的调用。

还有其他的

【问题讨论】:

  • 我们需要更多信息才能继续。导致崩溃的 Lua 脚本是什么?崩溃发生在哪里(在您的 C++ 代码中)?等等。
  • C++ 代码:lua_call(luaVM,2,0); // 这是发生崩溃的地方..它调用 lua 函数 RotateCam(pMyCam,angle) 其中 pMyCam 的类型为 Ogre::Camera,角度类型为 double。 lua 脚本包含:函数 RotateCam(pMyCam,angle),其中包含语句 pMyCam:yaw(angle)。如果我调用我创建的类的函数,那么它可以工作,但如果我调用库特定的函数,它就不起作用。

标签: c++ lua ogre3d


【解决方案1】:

你要找的是luabind,至少我现在基本上就是在使用Ogre。它在语法方面非常简单,您可以公开几乎所有内容,包括重载方法、只读属性、枚举和诸如此类的东西,它对我来说非常好。

我在一个包装引擎中使用它,其中包括 Ogre、CEGUI(如果你也使用它的话)和其他一些东西,到目前为止,我设法将我需要的几乎所有东西都暴露给 Lua,包括相机 - 、场景和对象管理。

是的,它是为使用 c++ 而设计的。

【讨论】:

    【解决方案2】:

    现在有一些库允许直接访问 C 库中的函数。

    像这些:

    【讨论】:

    • 我不太了解外星人(或它使用的 libffi),但 Luajits FFI 也适用于 C++。
    • 不,它没有。您链接到的页面说,“FFI 库允许从纯 Lua 代码调用外部 C 函数使用 C 数据结构。”您最多可以说,如果您的 C++ 数据结构将编译为 C,您可以使用它。但它肯定不适用于 C 函数,如果没有 extern "C"ing 它们。任何形式的 FFI 都基于通用 ABI 工作,而 C++ 的 ABI 不是交叉编译器。名称修饰等是特定于编译器的,因此不能像 C 那样普遍链接。
    • 那么有没有一种方法可以在我的 lua 脚本中使用 OGRE 函数,以便我可以在我的 c++ 代码中使用它们?如果我为这些函数编写包装器,它工作正常,但我想尝试最小化 c++ 代码
    • 我从未真正尝试过,但在我看来,使用这些库肯定是可能的。但是,如果我说您正在尝试使用 Lua 将 2 个 C++ 库绑定在一起,我说得对吗?像通常在 C++ 代码中包含库一样将它们链接在一起不是更有意义吗?
    • 我不想将 2 个 C++ 库绑定在一起。我想做的就是调用一个 C++ 库函数,就像调用一个用户定义的函数一样。因为当我调用我创建的类成员函数时它工作正常。但是我不能用库函数做同样的事情。我不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 2020-07-06
    • 2010-12-05
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多