RE: Scaling the matrix
2019-11-06, 9:33 (This post was last modified: 2019-11-06, 9:45 by Owen Dive.)
2019-11-06, 9:33 (This post was last modified: 2019-11-06, 9:45 by Owen Dive.)
(2019-11-06, 6:00)N. W. Perry Wrote: Aha—so the important thing to know is that all scaling operations happen in the boxes along that diagonal. X-scaling in the top left box, Y-scaling in the center, and Z-scaling in the bottom right. The other boxes get used for rotations (and other functions like shear which we wouldn't be using), so as long as I'm using the part's local orientation (or the part isn't rotated), I'll only ever need to change one box for scaling along a single axis.No - at least, not necessarily. Rotate a part about some arbitrary axis and you'll see all 9 numbers in the matrix change.
And am I accurately summing up what a matrix is to say that its 3 columns represent the x, y and z coordinates of each point being transformed, while its 3 rows represent movements of those coordinates along the x, y and z axes? And that's why, when we scale along the z axis, we're just taking each z coordinate (third column) and moving it a relative amount along the z axis (third row)? Or something like that…
I don't remember what the mathematical terminology is (and I may even get some of this completely wrong!) but it goes something like this:
Imagine you have a part and you want to describe its position and orientation relative to some coordinate system. Position is easy, you say "the centre of the part is at so many units along the x axis, so many along the y axis, and so many along the z axis". But orientation is not so clear. You have to say something like "If I start at the centre of the part, and go forward one unit relative to the part, I'll end up at position x1, y1, z1, and if I go left one unit relative to the part, I end up at position x2, y2, z2, and if I go up one unit, I end up at x3, y3, z3". The 9 numbers in the matrix are the coordinates of these three points.
Now suppose I want to scale in the (say) front/back axis, by a factor of 2. I can start at the centre of the part and move _2_ units forward. I'll end up at position 2*x1, 2*y1, 2*z1. If I put those numbers in my matrix, the rendering engine will assume that those coordinates were generated at 1 unit distance, and draw all the pixels two times further forward than before.
Does that make it any clearer? Or have I just made it more confusing?
Edit: Actually, on re-reading this thread, I suspect that you probably understand all that. If I could delete my post, I would.