[r142] Question about math in sprite.glsl.js vertex shader code

I was curious about this piece of code

	vec2 scale;
	scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );
	scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );

Specifically, what is the meaning behind getting the length of a matrix row/column? What does that number represent?


A model matrix contains information about rotation translation and scale of the model.
In simple 2D case, it looks like this:

scaleX * cos(rot),  -scaleY * sin(rot),  translationX,
scaleX * sin(rot),   scaleY * cos(rot),  translationY

calculating length of columns of this matrix extracts the value of scale from it, for example, for the first column:

length = sqrt( (scaleX * cos(rot))^2 + (scaleX * sin(rot))^2 ) = scaleX

matrix columns are essentially basis vectors of the frame that this matrix transforms vectors to when multiplied by them.