@ -48,16 +48,18 @@ public static class QExtensions
public static Vector3 ToUnity(this Vector3 vec)
{
return new Vector3(vec.x, vec.z, vec.y);
return new Vector3(vec.y, vec.z, -vec.x);
}
public static Vector3 ToUnityPosition(this QVec3 origin)
return new Vector3(origin.x, origin.z, origin.y);
return new Vector3(origin.y, origin.z, -origin.x);
public static Quaternion ToUnityRotation(this QVec3 angles)
return Quaternion.Euler(angles.x, -angles.y, -angles.z);
return Quaternion.AngleAxis(-angles.y, Vector3.up)
* Quaternion.AngleAxis(angles.x, Vector3.right)
* Quaternion.AngleAxis(angles.z, Vector3.forward);
@ -74,7 +74,11 @@ public partial class RenderModule
if (cam == null)
return;
angles.y -= 90; // Don't know why this correction is necessary
// Don't know exactly why this correction is necessary.
// Mixing Quake and Unity's coordinate systems creates a bit of a mess. With the current set of conversions
// we at least get everything to look right in every case I've tested, but it still seems a bit off somehow.
angles.y += 180;
angles.z = -angles.z;
cam.transform.position = origin.ToUnityPosition();
cam.transform.rotation = angles.ToUnityRotation();