diff --git a/doc/dox.h b/doc/dox.h index 710807ae3..3215016ab 100644 --- a/doc/dox.h +++ b/doc/dox.h @@ -566,19 +566,22 @@ A typical 4x4 matrix including a translational part looks like this: X1 Y1 Z1 T1 X2 Y2 Z2 T2 X3 Y3 Z3 T3 -0 0 0 1 + 0 0 0 1 @endcode -with (X1, X2, X3) being the image of the X base vector, (Y1, Y2, Y3) being the image of the -Y base vector, (Z1, Z2, Z3) being the image of the Z base vector and (T1, T2, T3) being the -translation part. -All matrices in the library are row-major. That means that the matrix elements are stored row by row in memory, -which is identical to the OpenGL matrix layout. So the above matrix is stored in memory as -[X1, Y1, Z1, T1, X2, Y2, Z2, T2, X3, Y3, Z3, T3, 0, 0, 0, 1]. If you want to use these matrices -in a framework, which expects the matrix layout to be column-major (stored along the columns), such as -DirectX or Matlab, you will have to transpose the matrix first. +with (X1, X2, X3) being the local X base vector, (Y1, Y2, Y3) being the local +Y base vector, (Z1, Z2, Z3) being the local Z base vector and (T1, T2, T3) being the +offset of the local origin (the translational part). +All matrices in the library use row-major storage order. That means that the matrix elements are +stored row-by-row, i.e. they end up like this in memory: +[X1, Y1, Z1, T1, X2, Y2, Z2, T2, X3, Y3, Z3, T3, 0, 0, 0, 1]. -To be very precise: The transposition has nothing to do with a left-handed or right-handed coordinate system -but 'converts' between row-major and column-major storage format. +Note that this is neither the OpenGL format nor the DirectX format, because both of them specify the +matrix layout such that the translational part occupies three consecutive addresses in memory (so those +matrices end with [..., T1, T2, T3, 1]), whereas the translation in an Assimp matrix is found at +the offsets 3, 7 and 11 (spread across the matrix). You can transpose an Assimp matrix to end up with +the format that OpenGL and DirectX mandate. To be very precise: The transposition has nothing +to do with a left-handed or right-handed coordinate system but 'converts' between row-major and +column-major storage format.