Coordinate conversion - ousttrue/UniGLTF GitHub Wiki

  • GLTF is right handed
  • Unity is left handed
  • Both GLTF and Unity is, x-right and y-up.
  • GLTF is z-backward
  • Unity is z-forward

Vector3

Vector3 reversed = new Vector3(src.x, src.y, -src.z);

Quaternion

float angle;
Vector3 axis;
src.ToAngleAxis(out angle, out axis);
Quaternion reversed = Quaternion.AngleAxis(-angle, new Vector3(axis.x, aixs.y, -axis.z));

Matrix4x4

var src = new Matrix4x4();
src.m00 = values[0];
src.m10 = values[1];
src.m20 = values[2];
src.m30 = values[3];
src.m01 = values[4];
src.m11 = values[5];
src.m21 = values[6];
src.m31 = values[7];
src.m02 = values[8];
src.m12 = values[9];
src.m22 = values[10];
src.m32 = values[11];
src.m03 = values[12];
src.m13 = values[13];
src.m23 = values[14];
src.m33 = values[15];

// ?
Matrix4x4 reversed = src;
m.m20 *= -1;
m.m21 *= -1;
m.m22 *= -1;
m.m23 *= -1;