fix maths_inline version of mat4.rotate

This commit is contained in:
MihailRis 2026-07-05 19:00:49 +03:00
parent 45c78609b8
commit 87310dd38f

View file

@ -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