public void LocalRotateForwardToSideTest() { var f = new Vector3(0, 0, 1); var s = new Vector3(-1, 0, 0); Assert.AreEqual(s, LocalSpaceBasisHelpers.LocalRotateForwardToSide(null, f)); }
public void RegenerateOrthonormalBasisTest() { var f = Vector3.UnitZ * 2; var u = Vector3.UnitY; Vector3 s; LocalSpaceBasisHelpers.RegenerateOrthonormalBasis(f, u, out f, out s, out u); Assert.AreEqual(Vector3.UnitZ, f); Assert.AreEqual(u, Vector3.UnitY); Assert.AreEqual(Vector3.Cross(f, u), s); }
public LocalSpace(Matrix4x4 transformation) { LocalSpaceBasisHelpers.FromMatrix(transformation, out ForwardField, out SideField, out UpField, out PositionField); }
// for supplying both a new forward and and new up public void RegenerateOrthonormalBasis(Vector3 newForward, Vector3 newUp) { LocalSpaceBasisHelpers.RegenerateOrthonormalBasis(newForward, newUp, out ForwardField, out SideField, out UpField); }
// ------------------------------------------------------------------------ // regenerate the orthonormal basis vectors given a new forward //(which is expected to have unit length) public void RegenerateOrthonormalBasisUF(Vector3 newUnitForward) { LocalSpaceBasisHelpers.RegenerateOrthonormalBasisUF(newUnitForward, out ForwardField, out SideField, ref UpField); }
// ------------------------------------------------------------------------ // set "side" basis vector to normalized cross product of forward and up public void SetUnitSideFromForwardAndUp() { LocalSpaceBasisHelpers.SetUnitSideFromForwardAndUp(ref ForwardField, out SideField, ref UpField); }
// ------------------------------------------------------------------------ // reset transform: set local space to its identity state, equivalent to a // 4x4 homogeneous transform like this: // // [ X 0 0 0 ] // [ 0 1 0 0 ] // [ 0 0 1 0 ] // [ 0 0 0 1 ] // // where X is 1 for a left-handed system and -1 for a right-handed system. public void ResetLocalSpace() { LocalSpaceBasisHelpers.ResetLocalSpace(out ForwardField, out SideField, out UpField, out PositionField); }