Swig封装GLM库
2018-3-16 16:12:57
收藏:0
阅读:148
评论:2
我目前正在开发一个2D游戏引擎,在实现LUA脚本/解释器时遇到了阻碍。
我正在使用SWIG,已经将基础功能全部正常运行。
在引擎中,我使用GLM(OpenGL数学库[http://glm.g-truc.net/])处理所有向量和矩阵相关的内容。
我真的需要将glm(以基础水平)通过SWIG暴露给LUA,以便我可以在LUA中调用方法,例如:
actor:GetPosition() <- 返回glm :: vec2
GLM是一个相当复杂的库(可能是一种低估lol),我不需要全部暴露,假设全部暴露将是荒谬的。我只是想能够访问glm :: vec2类的xy分量。
我相信这肯定很容易,因为SWIG不需要完整的类定义,必须有一种方法让SWIG只假定glm :: vec2类只有x,y参数。
我不确定是否使用SWIG中的代理类是这样做的方法?还是其他方法?我是LUA集成和SWIG的新手。
我真的不想走下放弃GLM并编写自己的矢量/矩阵库的路线,这个库要简单得多,没有模板等等,我可以简单地用SWIG包装,但我觉得这将是浪费时间,并且我最终会得到一个功能更弱的数学库:(。
先说声谢谢,如有必要,我可以提供更多信息。
点赞
用户734069
GLM存在的一个大问题是其向量类型使用了一些可疑的C++有效性的东西。这些东西很多编译器是可以_允许_的,但不符合标准。SWIG使用自己的解析器来工作,因此将很难理解GLM的定义。
在这种情况下,我建议使用像 Luabind 这样的东西,而不是 SWIG。在这种情况下,它提供了更多精细的控制,并且它的好处是不使用自己的解析器。当然,您可以有效地在 .swig 文件中为 GLM 的重要部分重新编写原型。
2012-08-14 13:15:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
使用 luabind 的解决方法如下所示:
#include <luabind/luabind.hpp> extern "C" int init(lua_State* L) { using namespace luabind; using namespace glm; open(L); module(L) [ class_<dvec2>("dvec2") .def_readwrite("x", &dvec2::x) .def_readwrite("y", &dvec2::y) ]; return 0; }