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 라이브러리가 있습니까? –