From 87310dd38f848ca059b627fc0b6d1d2503d05071 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sun, 5 Jul 2026 19:00:49 +0300 Subject: [PATCH] fix maths_inline version of mat4.rotate --- res/modules/internal/maths_inline.lua | 61 ++++++++++++++------------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/res/modules/internal/maths_inline.lua b/res/modules/internal/maths_inline.lua index 12b3243ea..e02fa96fe 100644 --- a/res/modules/internal/maths_inline.lua +++ b/res/modules/internal/maths_inline.lua @@ -276,11 +276,9 @@ function mat4.rotate(...) angle = rad(angle) - local x = axis[1] - local y = axis[2] - local z = axis[3] + local x, y, z = axis[1], axis[2], axis[3] - local len = sqrt(x*x + y*y + z*z) + local len = sqrt(x * x + y * y + z * z) if len == 0 then error("rotation axis has zero length") end @@ -293,39 +291,44 @@ function mat4.rotate(...) local s = sin(angle) local t = 1 - c - local r00 = t*x*x + c - local r01 = t*x*y - s*z - local r02 = t*x*z + s*y + local r00 = t * x * x + c + local r01 = t * x * y - s * z + local r02 = t * x * z + s * y - local r10 = t*x*y + s*z - local r11 = t*y*y + c - local r12 = t*y*z - s*x + local r10 = t * x * y + s * z + local r11 = t * y * y + c + local r12 = t * y * z - s * x - local r20 = t*x*z - s*y - local r21 = t*y*z + s*x - local r22 = t*z*z + c + local r20 = t * x * z - s * y + local r21 = t * y * z + s * x + local r22 = t * z * z + c local out = dst or {} - out[1] = matrix[1]*r00 + matrix[5]*r10 + matrix[9]*r20 - out[2] = matrix[2]*r00 + matrix[6]*r10 + matrix[10]*r20 - out[3] = matrix[3]*r00 + matrix[7]*r10 + matrix[11]*r20 - out[4] = matrix[4]*r00 + matrix[8]*r10 + matrix[12]*r20 + local m1, m2, m3, m4 = matrix[1], matrix[2], matrix[3], matrix[4] + local m5, m6, m7, m8 = matrix[5], matrix[6], matrix[7], matrix[8] + local m9, m10, m11, m12 = matrix[9], matrix[10], matrix[11], matrix[12] + local m13, m14, m15, m16 = matrix[13], matrix[14], matrix[15], matrix[16] - out[5] = matrix[1]*r01 + matrix[5]*r11 + matrix[9]*r21 - out[6] = matrix[2]*r01 + matrix[6]*r11 + matrix[10]*r21 - out[7] = matrix[3]*r01 + matrix[7]*r11 + matrix[11]*r21 - out[8] = matrix[4]*r01 + matrix[8]*r11 + matrix[12]*r21 + out[1] = m1 * r00 + m5 * r10 + m9 * r20 + out[2] = m2 * r00 + m6 * r10 + m10 * r20 + out[3] = m3 * r00 + m7 * r10 + m11 * r20 + out[4] = m4 * r00 + m8 * r10 + m12 * r20 - out[9] = matrix[1]*r02 + matrix[5]*r12 + matrix[9]*r22 - out[10] = matrix[2]*r02 + matrix[6]*r12 + matrix[10]*r22 - out[11] = matrix[3]*r02 + matrix[7]*r12 + matrix[11]*r22 - out[12] = matrix[4]*r02 + matrix[8]*r12 + matrix[12]*r22 + out[5] = m1 * r01 + m5 * r11 + m9 * r21 + out[6] = m2 * r01 + m6 * r11 + m10 * r21 + out[7] = m3 * r01 + m7 * r11 + m11 * r21 + out[8] = m4 * r01 + m8 * r11 + m12 * r21 - out[13] = matrix[13] - out[14] = matrix[14] - out[15] = matrix[15] - out[16] = matrix[16] + out[9] = m1 * r02 + m5 * r12 + m9 * r22 + out[10] = m2 * r02 + m6 * r12 + m10 * r22 + out[11] = m3 * r02 + m7 * r12 + m11 * r22 + out[12] = m4 * r02 + m8 * r12 + m12 * r22 + + out[13] = m13 + out[14] = m14 + out[15] = m15 + out[16] = m16 return out end