mat4-css-parse
Version:
converts a css matrix string into a mat4 array
56 lines (48 loc) • 1.25 kB
JavaScript
var splitter = /[,\s]+/i
var MAT_2D = 'matrix('
var MAT_3D = 'matrix3d('
var identity = require('gl-mat4/identity')
module.exports = function parseMatrix3d(str, out) {
if (str === '')
throw new Error('could not parse empty string')
if (str === 'none')
return identity(out || [])
var start = MAT_3D.length
if (str.charAt(6) === '(')
start = MAT_2D.length
//get components as floats
var numbers = str.substring(start, str.length-1).split(splitter)
for (var i=0; i<numbers.length; i++)
numbers[i] = parseFloat(numbers[i], 10)
//if 2D matrix, copy into mat4
if (numbers.length<16)
return toMat4(out, numbers)
//if no out is specified, we can use the split() array
if (!out)
return numbers
//otherwise we will copy values over
for (i=0; i<16; i++)
out[i] = numbers[i]
return out
}
function toMat4(out, a) {
if (!out)
out = new Array(16)
out[0] = a[0]
out[1] = a[1]
out[2] = 0
out[3] = 0
out[4] = a[2]
out[5] = a[3]
out[6] = 0
out[7] = 0
out[8] = 0
out[9] = 0
out[10] = 1
out[11] = 0
out[12] = a[4]
out[13] = a[5]
out[14] = 0
out[15] = 1
return out
}