Column version of to_vec4s (to_vec4s_cols) for issue #32

This commit is contained in:
mcc 2019-11-29 22:24:47 -05:00
parent 6c49915112
commit 13cc666232
2 changed files with 70 additions and 18 deletions

View File

@ -665,7 +665,7 @@ function mat4.to_string(a)
return str
end
--- Convert a matrix to vec4s.
--- Convert a matrix to row vec4s.
-- @tparam mat4 a Matrix to be converted
-- @treturn table vec4s
function mat4.to_vec4s(a)
@ -677,6 +677,18 @@ function mat4.to_vec4s(a)
}
end
--- Convert a matrix to col vec4s.
-- @tparam mat4 a Matrix to be converted
-- @treturn table vec4s
function mat4.to_vec4s_cols(a)
return {
{ a[1], a[5], a[9], a[13] },
{ a[2], a[6], a[10], a[14] },
{ a[3], a[7], a[11], a[15] },
{ a[4], a[8], a[12], a[16] }
}
end
-- http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/
--- Convert a matrix to a quaternion.
-- @tparam mat4 a Matrix to be converted

View File

@ -322,7 +322,12 @@ describe("mat4:", function()
end)
it("converts a matrix to vec4s", function()
local a = mat4()
local a = mat4 {
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16
}
local v = a:to_vec4s()
assert.is_true(type(v) == "table")
assert.is_true(type(v[1]) == "table")
@ -330,25 +335,60 @@ describe("mat4:", function()
assert.is_true(type(v[3]) == "table")
assert.is_true(type(v[4]) == "table")
assert.is.equal(1, v[1][1])
assert.is.equal(0, v[1][2])
assert.is.equal(0, v[1][3])
assert.is.equal(0, v[1][4])
assert.is.equal(1, v[1][1])
assert.is.equal(2, v[1][2])
assert.is.equal(3, v[1][3])
assert.is.equal(4, v[1][4])
assert.is.equal(0, v[2][1])
assert.is.equal(1, v[2][2])
assert.is.equal(0, v[2][3])
assert.is.equal(0, v[2][4])
assert.is.equal(5, v[2][1])
assert.is.equal(6, v[2][2])
assert.is.equal(7, v[2][3])
assert.is.equal(8, v[2][4])
assert.is.equal(0, v[3][1])
assert.is.equal(0, v[3][2])
assert.is.equal(1, v[3][3])
assert.is.equal(0, v[3][4])
assert.is.equal(9, v[3][1])
assert.is.equal(10, v[3][2])
assert.is.equal(11, v[3][3])
assert.is.equal(12, v[3][4])
assert.is.equal(0, v[4][1])
assert.is.equal(0, v[4][2])
assert.is.equal(0, v[4][3])
assert.is.equal(1, v[4][4])
assert.is.equal(13, v[4][1])
assert.is.equal(14, v[4][2])
assert.is.equal(15, v[4][3])
assert.is.equal(16, v[4][4])
end)
it("converts a matrix to vec4s, column-wise", function()
local a = mat4 {
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12,
13, 14, 15, 16
}
local v = a:to_vec4s_cols()
assert.is_true(type(v) == "table")
assert.is_true(type(v[1]) == "table")
assert.is_true(type(v[2]) == "table")
assert.is_true(type(v[3]) == "table")
assert.is_true(type(v[4]) == "table")
assert.is.equal(1, v[1][1])
assert.is.equal(5, v[1][2])
assert.is.equal(9, v[1][3])
assert.is.equal(13, v[1][4])
assert.is.equal(2, v[2][1])
assert.is.equal(6, v[2][2])
assert.is.equal(10, v[2][3])
assert.is.equal(14, v[2][4])
assert.is.equal(3, v[3][1])
assert.is.equal(7, v[3][2])
assert.is.equal(11, v[3][3])
assert.is.equal(15, v[3][4])
assert.is.equal(4, v[4][1])
assert.is.equal(8, v[4][2])
assert.is.equal(12, v[4][3])
assert.is.equal(16, v[4][4])
end)
it("converts a matrix to a quaternion", function()