public override void finalize(WalkEnding end, ulong _time) { switch (end) { case WalkEnding.Identity: break; case WalkEnding.TargetParentOfSource: result_vec = source_to_top_vec; result_quat = source_to_top_quat; break; case WalkEnding.SourceParentOfTarget: { emQuaternion inv_target_quat = target_to_top_quat.inverse(); emVector3 inv_target_vec = quatRotate(inv_target_quat, -1 * target_to_top_vec); result_quat = inv_target_quat; result_vec = inv_target_vec; } break; case WalkEnding.FullPath: { emQuaternion inv_target_quat = target_to_top_quat.inverse(); emVector3 inv_target_vec = quatRotate(inv_target_quat, -1 * target_to_top_vec); result_vec = quatRotate(inv_target_quat, source_to_top_vec) + inv_target_vec; result_quat = inv_target_quat * source_to_top_quat; } break; } time = _time; }
public emVector3 quatRotate(emQuaternion rotation, emVector3 v) { emQuaternion q = rotation * v; q *= rotation.inverse(); return(new emVector3(q.x, q.y, q.z)); }
public emVector3 quatRotate(emQuaternion rotation, emVector3 v) { emQuaternion q = rotation * v; q *= rotation.inverse(); return new emVector3(q.x, q.y, q.z); }