CCD本身就像魅力一樣工作。 如果您正在使用3D,請首先找到您應該在每個軸上執行的旋轉,而不應用骨骼限制。
之後,該方法
expectedRotation.X = min(expectedRotation.X, maxLimit.X)
expectedRotation.X = max(expectedRotation.X, minLimit.X)
expectedRotation.Y = min(expectedRotation.Y, maxLimit.Y)
expectedRotation.Y = max(expectedRotation.Y, minLimit.Y)
expectedRotation.Z = min(expectedRotation.Z, maxLimit.Z)
expectedRotation.Z = max(expectedRotation.Z, minLimit.Z)
是錯誤。因爲,如果你不能進一步在一個軸上移動,另外兩個軸將繼續移動,你會得到奇怪的結果。
的修復:
如果任何一個3個錯配限額的約束,必須根本改變旋轉。
首先將所有角度轉換爲-180至180格式的度數。那麼下面將做
vector3df angleDifference = expectedRotation - baseRotation; //baseRotation is just the initial rotation from which the bone limits are calculated.
if(angleDifference.X < boneLimits.minRotation.X || angleDifference.Y < boneLimits.minRotation.Y || angleDifference.Z < boneLimits.minRotation.Z || angleDifference.X > boneLimits.maxRotation.X || angleDifference.Y > boneLimits.maxRotation.Y || angleDifference.Z > boneLimits.maxRotation.Z)
return currentRotation;
return expectedRotation;
有沒有我可以使用的任何IK庫? –