Files
REM-Mod/DATA/SCRIPTS/HELPERS/convert.lua
2025-05-14 18:25:56 +02:00

63 lines
1.3 KiB
Lua

Convert = {}
Convert["QuatToMatrix"] = function(quat)
local x = quat[1]
local y = quat[2]
local z = quat[3]
local w = quat[4]
local x2 = x + x
local y2 = y + y
local z2 = z + z
local xx = x * x2
local yx = y * x2
local yy = y * y2
local zx = z * x2
local zy = z * y2
local zz = z * z2
local wx = w * x2
local wy = w * y2
local wz = w * z2
local result = {
{ 1 - yy - zz, yx + wz, zx - wy },
{ yx - wz, 1 - xx - zz, zy + wx },
{ zx + wy, zy - wx, 1 - xx - yy }
}
return result
end
Convert["EulerToQuat"] = function (x, y, z)
local b = y * 0.5;
local c = x * 0.5;
local d = z * 0.5;
local sp = sin(b)
local cp = cos(b)
local sy = sin(c)
local cy = cos(c)
local sr = sin(d)
local cr = cos(d)
local a0 = sp * cy * cr
local b0 = cp * sy * sr
local a1 = cp * sy * cr
local b1 = sp * cy * sr
local a2 = cp * cy * sr
local b2 = sp * sy * cr
local a3 = cp * cy * cr
local b3 = sp * sy * sr
local result = { Math.round(a0 + b0, 5), Math.round(a1 - b1, 5), Math.round(a2 + b2, 5), Math.round(a3 - b3, 5) }
return result
end
-- Should be called in place of orient like this: orient = Convert.EulerToMatrix(x, y, z),
Convert["EulerToMatrix"] = function (x, y, z)
local q = Convert.EulerToQuat(y, x, z)
local m = Convert.QuatToMatrix(q)
return m
end