Transforming a 4x4 matrix from one base to another

  • Thread starter Thread starter AdrianM
  • Start date Start date
  • Tags Tags
    Base Matrix
Click For Summary
SUMMARY

This discussion focuses on converting a 4x4 matrix from 3D Studio Max's right-handed coordinate system to OpenGL's left-handed coordinate system. The transformation matrix required for this conversion is defined as [-1, 0, 0; 0, 0, 1; 0, 1, 0], which effectively maps the coordinates from 3D Studio Max's format of (x, y, z) to OpenGL's format of (-x, z, y). Additionally, the matrix is its own inverse, allowing for bidirectional transformations. The user also notes the importance of handling the translation component in 4x4 matrices during this conversion process.

PREREQUISITES
  • Understanding of 3D coordinate systems, specifically right-handed and left-handed systems.
  • Familiarity with matrix transformations in 3D graphics.
  • Knowledge of 3D Studio Max and its coordinate conventions.
  • Basic understanding of OpenGL matrix formats, particularly row-major and column-major representations.
NEXT STEPS
  • Research the differences between row-major and column-major matrix representations in OpenGL.
  • Learn about the implications of coordinate system transformations in 3D graphics.
  • Explore the use of transformation matrices in skeletal animation export processes.
  • Investigate how to handle translation components in 4x4 matrices during conversions.
USEFUL FOR

3D graphics developers, game developers, and technical artists who are working with 3D Studio Max and OpenGL, particularly those involved in exporting skeletal animations and managing coordinate transformations.

AdrianM
Messages
2
Reaction score
0
I'm writing an exporter for 3d studio max and i want to export skeletal animation. 3D studio max uses a coordinate system that has the X axis going from left to right, the Z Axis going from bottom to top and the Y axis going from front to back. Opengl uses a left handed coordinate system, whilst 3d max uses a right handed coordinate system. OpenGL's X axis goes from left to right, Y goes from bottom to top and Z goes from back to front.

I want to convert a 3d studio max matrix to use it with OpenGL. Matrices hold transformation information. How can i accomplish this?
 
Physics news on Phys.org
AdrianM said:
I'm writing an exporter for 3d studio max and i want to export skeletal animation. 3D studio max uses a coordinate system that has the X axis going from left to right, the Z Axis going from bottom to top and the Y axis going from front to back. Opengl uses a left handed coordinate system, whilst 3d max uses a right handed coordinate system. OpenGL's X axis goes from left to right, Y goes from bottom to top and Z goes from back to front.

I want to convert a 3d studio max matrix to use it with OpenGL. Matrices hold transformation information. How can i accomplish this?
Sounds to me like (x, y, z) in 3D studio max goes to (-x, z, y) in OpenGL. The matrix
\left[\begin{array}{ccc}-1 & 0 & 0 \\ 0 & 0 & 1\\ 0 & 1 & 0\end{array}\right]
will do that.

That matrix happens to have the nice property that it is its own inverse (because the inverse of changing x to -x is changing x to -x and the inverse of swapping y and z is to swap y and z) so you can also use it to change coord systems the other way.
 
HallsofIvy said:
Sounds to me like (x, y, z) in 3D studio max goes to (-x, z, y) in OpenGL. The matrix
\left[\begin{array}{ccc}-1 & 0 & 0 \\ 0 & 0 & 1\\ 0 & 1 & 0\end{array}\right]
will do that.

That matrix happens to have the nice property that it is its own inverse (because the inverse of changing x to -x is changing x to -x and the inverse of swapping y and z is to swap y and z) so you can also use it to change coord systems the other way.

I think i don't know where -X is coming from. In the phase where i load the static model i convert every 3d studio max point from (x,y,z) to (x,z,-y) and it works fine. 3D studio max uses 4x4 matrices that contain on the last row a translation component. I tried converting a 3d studio max matrix into an opengl in quite a few ways but i had no luck :confused:. So your matrix indeed converts a point from (x,yz) to (-x,z,y), which is not what I'm doing. What I'm interested though is how to convert a 4x4 row major 3ds matrix into a 4x4 column major ogl matrix.
 
My fault. I misread and thought OpenGL's x-axis went from right to left! The correct matrix is
\left[\begin{array}{ccc}1 & 0 & 0 \\ 0 & 0 & 1\\ 0 & 1 & 0\end{array}\right]
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 12 ·
Replies
12
Views
5K
Replies
31
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
3K
Replies
2
Views
5K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 3 ·
Replies
3
Views
2K
Replies
1
Views
3K