public override void Update() { MSceneObject msp = (MSceneObject)Parent; Vector3d CurrentPos = msp.transform.Position; Quaterniond CurrentRot = msp.transform.Rotation; //CurrentPos = Vector3d.Lerp(CurrentPos, TargetPosition, Time.DeltaTime * Speed); Start += Time.DeltaTime * Speed; if (Start > 1) { Start = 1; } CurrentPos = Extensions.SmoothStep(StartPosition, TargetPosition, Start); CurrentRot = Quaterniond.Slerp(StartRotation, TargetRotation, Start); msp.SetRotation(CurrentRot); msp.SetPosition(CurrentPos); //msp.LookAt(TargetPosition); double distance = Vector3d.Distance(CurrentPos, TargetPosition); if (distance < 1) { TeleportComplete(); } }
public override void Update() { base.Update(); if (Target == null) { return; } CalcSurfaceDistance(); if (Target is MAnimatedModel) { CurrentSpeed = (float)_physics._rigidBody.LinearVelocity.Length; //Console.WriteLine("MAvatar.Update:"+CurrentSpeed); SyncAnimationToState(); } Controller.Update(); if (MoveMode == eMoveMode.Walking) { if (_physics != null) { //Quaterniond rot = Quaterniond.Slerp(GetRotation(), TargetRotation, Time.DeltaTime * 15); Quaterniond rot = Quaterniond.Slerp(GetRotation(), TargetRotation, 0.01 * 15); _physics.SetRotation(rot); //_physics.SetRotation(TargetRotation); } } if (MoveMode == eMoveMode.Flying) { CalcAerodynamics(); } }
public override void Update() { if (Enabled == false) { return; } MSceneObject so = (MSceneObject)Parent; if (so != null) { Quaterniond q = so.transform.Rotation * AngleOffset; so.transform.Rotation = Quaterniond.Slerp(so.transform.Rotation, q, Time.DeltaTime * Speed); } if (_physics != null) { _physics.SetRotation(so.transform.Rotation); } }
void TurnToHome() { //Matrix4d m = Matrix4d.LookAt(model.transform.Position, OriginalPosition, Globals.LocalUpVector); //Matrix4d m = Matrix4d.RotateY(model.transform.Position, OriginalPosition, Globals.LocalUpVector); //Quaterniond q = m.ExtractRotation(); //Quaterniond q = Quaterniond.FromAxisAngle(model.transform.Up(), 0.1); // model.SetRotation(q); Vector3d delta = model.transform.Position - OriginalPosition; Vector3d d2 = model.transform.Position + model.transform.Forward(); double d = Vector3d.Dot(delta.Normalized(), d2.Normalized()); Quaterniond s = Quaterniond.Slerp(model.transform.Rotation, model.transform.Rotation * Quaterniond.FromEulerAngles(0, -d, 0), 0.0150); model.SetRotation(s); }
public void Slerp() { for (int i = 0; i < count; i++) { Quaternion a = new Quaternion(); Quaternion b = new Quaternion(); Quaterniond ad = new Quaterniond(); Quaterniond bd = new Quaterniond(); float p = UnityEngine.Random.Range(-2F, 2F); RandomQuaternion(ref a, ref ad); RandomQuaternion(ref b, ref bd); Quaternion value = Quaternion.Slerp(a, b, p); Quaterniond valued = Quaterniond.Slerp(ad, bd, p); Assert.True(Approximate(value, valued)); } }
public override void Update() { if (Idle == true) { return; } if (msoParent == null) { return; } if (po == null) { po = (MPhysicsObject)Parent.FindModuleByType(EType.PhysicsObject); } MSceneObject msp = (MSceneObject)Parent; Vector3d CurrentPos = msp.transform.Position; Quaterniond CurrentRot = msp.transform.Rotation; //CurrentPos = Vector3d.Lerp(CurrentPos, TargetPosition, Time.DeltaTime * Speed); Value += Time.DeltaTime * Speed; if (Value > 1) { Value = 1; } double dist = (Vector3d.Distance(TargetPosition, CurrentPos)); if (dist > 1000) { Start = 0.999; if (po != null) { po.SetActive(false); } } CurrentPos = Vector3d.Lerp(StartPosition, TargetPosition, Value); CurrentRot = Quaterniond.Slerp(CurrentRot, TargetRotation, Value); //if ( dist< 0.1) if (Value >= 1) { CurrentPos = TargetPosition; CurrentRot = TargetRotation; Idle = true; //msp.SetPosition(TargetPosition); //msp.SetRotation(TargetRotation, false); //Console.WriteLine("idle"); if (po != null) { po.SetActive(true); } Complete(); } else { if (po != null) { po.SetActive(true); } } msp.SetPosition(CurrentPos); msp.SetRotation(CurrentRot, false); }