Я пытаюсь использовать Mathfu :: Vector из Lua для создания векторов, но у меня возникает проблема, когда я пытаюсь извлечь пользовательские данные обратно из стека.
вот функция Я использую для определения пользовательских данных
static int vec4(lua_State *L)
{
const float x = luaL_checknumber(L, 1);
const float y = luaL_checknumber(L, 2);
const float z = luaL_checknumber(L, 3);
const float w = luaL_checknumber(L, 4);
mathfu::Vector<float, 4> vec(x, y, z, w);
*static_cast<mathfu::Vector<float, 4> **>(
lua_newuserdata(L, sizeof(mathfu::Vector<float, 4> *))) = &vec;
luaL_setmetatable(L, VECTOR_LIB_NAME);
return 1;
}
И у меня есть функция, которая получает скалярное произведение двух векторов на основе значения self
и аргумента (оба userdata)
static int dotVector(lua_State *L)
{
mathfu::Vector<float, 4> *vecA = *static_cast<mathfu::Vector<float, 4> **>(luaL_checkudata(L, 1, VECTOR_LIB_NAME));
mathfu::Vector<float, 4> *vecB = *static_cast<mathfu::Vector<float, 4> **>(luaL_checkudata(L, 2, VECTOR_LIB_NAME));
LOGI("A: %f, %f, %f", vecA->x, vecA->y, vecA->z);
LOGI("B: %f, %f, %f", vecB->x, vecB->y, vecB->z);
float dot = mathfu::Vector<float, 4>::DotProduct(*vecA, *vecB);
lua_pushnumber(L, dot);
return 1;
};
вызывается из lua как
local vecA = vec4(1, 2, 3, 4)
local vecB = vec4(5, 6, 7, 8)
vecA:dot(vecB)
Но печатаемые значения сумасшедшие, как будто они преобразуют неверные данные в число с плавающей точкой
A: -8055257885499399810754615288266752.000000, 0.000000, 0.000000
B: 0.000000, 3746318080.000000, 3573.204346
Я исследовал стек и Первые два элемента, безусловно, UserData, но я, кажется, не могу копать глубже в пользовательских данных. Переменные в C ++ содержат эти значения, но я не знаю, что может быть причиной этого. Я уверен, что пользовательские данные - это не то, чего я ожидаю.