Пример #1
0
		Quatf   Tracker::CalculateTimeWarpMatrix(Quatf inFrom, Quatf inTo)
		{
			bool fromValid = inFrom.LengthSq() > 0.95f;
			bool toValid = inTo.LengthSq() > 0.95f;
			if (!fromValid)
			{
				MOJING_ERROR(g_APIlogger, "Invalid Srouce view rotate");
				if (toValid)
				{
					inFrom = inTo;
				}
				else
				{
					inFrom = Quatf(0.0f, 0.0f, 0.0f, 1.0f); // just force identity
				}
			}
			if (!toValid)
			{
				MOJING_ERROR(g_APIlogger, "Invalid Targer view rotate");
				if (fromValid)
				{
					inTo = inFrom;
				}
				else
				{
					inTo = Quatf(0.0f, 0.0f, 0.0f, 1.0f); // just force identity
				}
			}
			/************************************************************************
			 注意:                                                               
				下面的代码如果写成
					(inFrom * inTo.Inverted()).Inverted(),那么预测的图像方向将与运动方
					向一致,这就导致了运动时的卡顿。				
			/************************************************************************/
			// 20170731 
			Quatf qFix = (inFrom * inTo.Inverted())/*.Inverted()*/;
			// qFix.z *= -1;
			return qFix;
		}