Sign in to follow this  

Order of transformation in a software renderer?

This topic is 4691 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm writing a very simple software renderer. Due to size constraints I'm not using matrices but rather an all purpose transform(vertex[], posxyz, anglexyz) function that rotates and then translates a vertex. First I transform the models in model space then transform() it again with the camera position and angle. The thing is this; I discovered I can't just do the camera transform like the model transform ie: rotate-->translate it needs to be: translate-->rotate I've read alot of stuff online about software renderering and I don't recall reading this before. I suspect it has something to do with matrix math (that's what I'm not really strong on). Is this right? Can anyone explain what I'm missing here?

Share this post


Link to post
Share on other sites
It is true that the order is important, because matrix multiplication is not commutative (eg. matrix1 * matrix2 != matrix2 * matrix1).

For example, take 2x2 matrices:


Matrix1 = | a b |
| c d |

Matrix2 = | e f |
| g h |

Matrix1 x Matrix2 = | (a * e) + (b * g) (a * f) + (b * h) |
| (c * e) + (d * g) (c * f) + (d * h) |

Matrix2 x Matrix1 = | (e * a) + (f * c) (e * b) + (f * d) |
| (g * a) + (h * c) (g * b) + (h * d) |


Edit: Mixed up associativity and commutativity..

Share this post


Link to post
Share on other sites
Quote:
matrix multiplication is not commutative


I've read this quiet a few times; I suppose this is a real world application that displays that fact. I didn't realize rotating/translating more than once would be a multiplication operation in linear algebra.

Thanks!

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
Trying it out by hand may help understanding. A simple example:

Consider a vertex at the origin. Rotate it counter-clockwise 90 degrees, then translate it 5 units right. It will be at (5,0).

Now, consider another vertex at the origin. Translate it 5 units right, then rotate it counter-clockwise 90 degrees. It will be at (0,5).

Share this post


Link to post
Share on other sites

This topic is 4691 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this