# Mesh in right-handed coordinate system, how to flip it?

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

## Recommended Posts

Hi

All my (shamelessly stolen from a game) meshses are upside down and rotated 180 degrees. This leads me to belive that the meshes are in the right-handed coordinate system. DirectX uses the left-handed coordinate system.

I have been rotating my meshes during transformation as a quick fix but I'm not quite sure if I should continue doing so.

I guess all the animation sequences are also Right-handed.

Now, is there any point in converting all this data to the Left-handed system during load time, and if so, how could I do that (vertices, textures, animations, etc)?

Cheers!

##### Share on other sites

would it not be better to import the model in the 3d modeling package that you use and do it that way ?, i think you didn't make the model by the sounds of it so you should be able to do it you're self ..

##### Share on other sites

I would expect handedness to show up with models appearing inside out, as the tri indices would all be wound backwards. It seems more likely that the handedness is the same, but the choice of world vectors in the modelling program is different than the one you are using. For instance, I generally think of y+ as up, and z+ as forward, yet blender which i use for modelling use z+ as world up. So at export time I must apply a 90 rotation to align my model so that it is good to go for my projects. If it truely is a handedness issue, then the solution is to invert 1(or all 3) of the coordinates(so point p(x,y,z) = p(x,y,-z) or similar), and swap 1 pair of indices per triangle(so that a triangle t(i0,i1,i2) = t(i0,i2,i1).

##### Share on other sites

I have been rotating my meshes during transformation as a quick fix but I'm not quite sure if I should continue doing so.

Uhm, No. You are just setting yourself up for some weird bugs that will eventually occur when you make a mistake. Which you will, eventually.

Trying to endlessly switch/convert between 2 different coordinate systems will just mess you up and may make you introduce a bug in a different class (or, and this is much more probable, in concatenation of the transf.Matrices), just because you are still focusing on coord.system.

Fix the problem right at the source - is the file in different coordinate system ? Then apply all the transformation right after you import the mesh so you don't have to worry about it anymore.

Do you have lots of meshes and don't want to do all those calculations at start-up ? Then , right after you import and transform to a correct coordinate system, save the transformed vertices and you will be 100% sure that coord.system is never the problem anymore.

##### Share on other sites

I would expect handedness to show up with models appearing inside out, as the tri indices would all be wound backwards.

Not really. He doesn't say anything about the Winding Order (clock-wise / counter-clockwise). That's a completely separate topic and issue altogether. Different gfx packages allow you to switch between them.

What's even worse is that different gfx APIs define the default backface culling differently.

Meaning -

1. INPUT : There is the first combination of Winding Order and Coordinate System of your gfx package (3dsmax,maya,softimage,blender,...)

2. OUTPUT: And there is the second combination of Winding Order and Coordinate System of your gfx API (OpenGL, DirectX, XNA, MESA, ...)

I would strongly suggest to take the time and Literally write down :

1. the Winding ordering for both input/output

2. the Coordinate system - EXPLICITLY - where each of the Positive halfspace is oriented  (e.g. Z-Axis towards the viewer, Y-Axis Up, X-Axis Right), for both INPUT and OUTPUT, directly into the source code for later reference. If you really think that you're going to remember it after 18 months, then you're in for a dissapointment.

While messing with the Coord.system, I strongly recommend to turn the culling off altogether and fix the Winding issue when the coord.system is taken care of.

Example : Importing mesh from 3dsmax into XNA.

- exchange Y and Z coordinate

- invert Z coordinate (due to XNA's coord system)

One more thing - a very common mistake is to forget to do the transformation on Normals and it may take quite some time to figure out something is wrong with the lighting ONLY under certain angles and make the connection to untransformed normals.