private AxesPair GetSecondAxesPair(AxesPair axes) { switch (axes) { case AxesPair.XY: return(AxesPair.XZ); case AxesPair.YZ: return(AxesPair.YX); case AxesPair.ZX: return(AxesPair.ZY); case AxesPair.YX: return(AxesPair.YZ); case AxesPair.ZY: return(AxesPair.ZX); case AxesPair.XZ: return(AxesPair.XY); default: throw new InvalidEnumArgumentException("Unsupported axes pair"); } }
private void AxesPairToUI(AxesPair pair, out string uiAxis1, out string uiAxis2) { string axis1, axis2, axis3; AxesPairToHLSL(pair, out axis1, out axis2, out axis3); uiAxis1 = "Axis" + axis1[axis1.Length - 1]; uiAxis2 = "Axis" + axis2[axis2.Length - 1]; }
/// <summary> /// Given two axes in (X, Y, Z), compute the third one so that the resulting basis is left handed /// </summary> /// <param name="axis1">hlsl value of first axis in pair</param> /// <param name="axis2">hlsl value of second axis</param> private string LeftHandedBasis(AxesPair axes, string axis1, string axis2) { if (axes <= AxesPair.ZX) { return("cross(" + axis1 + ", " + axis2 + ")"); } else { return("cross(" + axis2 + ", " + axis1 + ")"); } }
private void AxesPairToHLSL(AxesPair axes, out string axis1, out string axis2, out string axis3) { const string X = "axisX"; const string Y = "axisY"; const string Z = "axisZ"; switch (axes) { case AxesPair.XY: axis1 = X; axis2 = Y; axis3 = Z; break; case AxesPair.XZ: axis1 = X; axis2 = Z; axis3 = Y; break; case AxesPair.YX: axis1 = Y; axis2 = X; axis3 = Z; break; case AxesPair.YZ: axis1 = Y; axis2 = Z; axis3 = X; break; case AxesPair.ZX: axis1 = Z; axis2 = X; axis3 = Y; break; case AxesPair.ZY: axis1 = Z; axis2 = Y; axis3 = X; break; default: throw new InvalidEnumArgumentException("Unsupported axes pair"); } }
private void AxesPairToVector(AxesPair pair, out Vector3 axis1, out Vector3 axis2) { Vector3 X = Vector3.right, Y = Vector3.up, Z = Vector3.forward; switch (pair) { case AxesPair.XY: axis1 = X; axis2 = Y; break; case AxesPair.XZ: axis1 = X; axis2 = Z; break; case AxesPair.YX: axis1 = Y; axis2 = X; break; case AxesPair.YZ: axis1 = Y; axis2 = Z; break; case AxesPair.ZX: axis1 = Z; axis2 = X; break; case AxesPair.ZY: axis1 = Z; axis2 = Y; break; default: throw new InvalidEnumArgumentException("Unsupported axes pair"); } }