Я пытаюсь подключить свой 3d-движок к парсеру lua (5.1).Например, у меня есть класс LUA vec3, и у меня есть класс C ++ vec3.Я хочу, чтобы они работали друг с другом.
Это (часть) моего класса C ++:
class vec3
{
public:
vec3() {}
vec3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
vec3 operator+(const vec3 &b)
{
return vec3(x + b.x, y + b.y, z + b.z);
}
float dot(const vec3 &b)
{
return x * b.x + y * b.y + z * b.z;
}
float x, y, z;
}
Это (ограниченная) версия lua:
vec3 = {};
vec3.__index = vec3;
local mt = {}
mt.__call = function(class_tbl, ...)
local obj = {}
setmetatable(obj, vec3);
vec3.init(obj, ...);
return obj;
end
vec3.init = function(obj, x, y, z)
obj.x, obj.y, obj.z = x, y, z;
end
setmetatable(vec3, mt);
function vec3:__tostring()
return "(" .. self.x .. ", " .. self.y .. ", " .. self.z .. ")";
end
function vec3:__add(b)
return vec3(self.x + b.x, self.y + b.y, self.z + b.z);
end
function vec3:dot(b)
return self.x * b.x + self.y * b.y + self.z * b.z;
end
Я думаю, что вопрос совершенно очевиден: я хочу иметь возможность использовать vec3 в моем коде C ++, например, для позиционирования узлов или других вещей, а затем я хочу иметь возможность сделать их доступными в LUA, где программист LUA может делатьматематика с vec3 и отправить их обратно в C ++.Поэтому я также хочу иметь возможность построить vec3 в LUA и отправить его на C ++, где он понимается как класс vec3.
Чтобы достичь этого, я думаю, что мне нужно вместо этого построить вышеупомянутую таблицу LUA в Cв LUA, и мне нужно создать функцию «push» и «pop» для отправки их в LUA и получения их из LUA.
Но все мои испытания не удаются.
Может кто-нибудь мне помочьзаставить это работать?
Дирк.