I just noticed the unity default axis is a left-handed coordinate system. Interesting.
This would explain for some interesting sign conventions in various cross-product as well as cross-product quantities -- torque/moment of inertia, angular velocity.
My question then is: why is Unity a left-handed coordinate system? Are there design, performance, or other benefits for this? Why not a right-handed system (OpenGL is right-handed..)
To reinforce what's already been said, there is no standard with respect to coordinate-system handedness in games and graphics; neither left-handed nor right-handed is more standard or 'correct' than the other.
There's a common misconception that Direct3D is left-handed and OpenGL is right-handed, but that's not actually true (not to the best of my knowledge at least). The two APIs are usually presented that way in references and tutorials, but you can easily use either handedness with either API. The DirectX math library offers both right- and left-handed versions of all functions for which handedness matters, and as for OpenGL, the option of uploading your own transform matrices has been available since the earliest versions of the API (and in newer versions of OpenGL, even the few convenience functions that used a right-handed system have been deprecated or removed, as I understand it).
As for the cross product (for example), note that it does not differ mathematically between left- and right-handed coordinate systems. The result may differ when visualized, but mathematically the operation is the same.
To respond to Jessy's comment above:
Unity was made by Western people. The
convention for such people is that
right is the positive direction. Put
that together with what I said above;
when you think left-to-right, then X
being positive from the vantage point
of the game object (which is often a
character or camera), is the way to
Despite the fact that OpenGL doesn't actually enforce a specific handedness, just about every OpenGL reference and tutorial ever created uses a right-handed system, so apparently it's not quite so clear that left-handed is 'the way to go' (if that's what you're implying).
Also, view space is only one of many spaces that may be of interest to developers. For example, in some contexts a right-handed system with +z up may be preferred because this results in the standard Cartesian XY coordinate system corresponding to the ground plane and z increasing with altitude. Other APIs (such as the Unreal engine) use a left-handed system, but with +z up rather than +y. There are many different conventions that are commonly used, and none of them is more 'correct' than the others (although certain conventions certainly may seem more correct to some as a result of the individual's background and personal preference).
Neither left-handed or right-handed is a standard, so there is nothing wrong in Unity using left-handed.
Maths = Right Handed
Physics = Right Handed
OpenGL = Right Handed
XNA = Right Handed
DirectX = Left Handed // well only cube map sampling is hard coded to left handed
Unity = Left Handed // and not configurable
Right handed (or configurable) would be the smart choice.
I have a really stupid question:
Where is the documentation for the Unity3D coordinate system convention?
Ideally, I would like to have an official document, that I can cite in a technical report, which contains:
- coordinate system: left handed
- gravity convention: in which direction is gravity pointing? Seems like its negative y.
- Euler Angles: which order of rotation (there are 64 different possibilities!). Seems like its Kardan, with z → y → x, all counter clockwise.
- Quaternions: Is w rotating clock wise or counterclockwise around the xyz vector?
- Units: SI? Seems like the unit translation is ment to be 1 meter.
If you are right-handed, then the front-side of a triangle should also be right-handed. That is, the vertices (0, 1, 2) should wind counter-clockwise. Why? If you take Vector01 X Vector02, you get the normal which determines the front of the face for front-facing/back-facing checks. If you are left-handed, the non-commutative cross product becomes Vector02 X Vector01 to get the normal.
If you add the UVs to the triangle, I would prefer the U to go along positive X and V to go along positive Y. This leads to a right-handed coordinate system to produce a non-mirrored image.
I believe that this coordination between 2D and 3D elements makes right-handed preferred over left-handed. Additionally, physics are typically done in right-handed systems which further adds to the preference.