Jim's Depository

this code is not written

I fervently hope that Google brings you this search result in a timely manner.

CATransform3D is a row major matrix. When they say “m23”, they mean row 2, column 3.

GLKMatrix4 is a column major matrix. When they say “m23”, they mean row 3, column 2.

This means they are NOT laid out the same in memory, their initializers are acceptable to one another but incompatible, and if you called GLKMatrix4Make(…) with row major thoughts in your head, you will be very sad after you later call GLKMatrix4Multiply.

The people who write documentation, and perhaps mathematicians, don’t like to sully their hands with details like row major and column major, after all rows and columns are simply logical fictions. (You can’t actually tell what CATransform3D thinks is a row or column until you do a multiply, but GLKit has some functions with Row and Column in the name.)

Programmers, who might like their OpenGL view to display something do care.

You can get it wrong and not notice, except for a nagging feeling that all your matrix multiplications ( CATransform3dConcat or GLKMatrix4Multiply) are backwards. The other operations are happy to work transposed.