我想縮放骨架以匹配另一個骨架的大小。 我algoritm請執行以下操作:Kinect骨架縮放奇怪的行爲
- 尋找原點骨架的兩個關節,並使用phytagorean teorem
- 分這兩個距離找到倍率命運骨架之間的距離。
- 用這個因子乘以每個關節。
這裏是我的實際代碼:
public static Skeleton ScaleToMatch(this Skeleton skToBeScaled, Skeleton skDestiny)
{
Joint newJoint = new Joint();
double distanciaOrigem = 0;
double distanciaDestino = 0;
double fator = 1;
SkeletonPoint pos = new SkeletonPoint();
foreach (BoneOrientation bo in skToBeScaled.BoneOrientations)
{
distanciaOrigem = FisioKinectCalcs.Distance3DBetweenJoint(skToBeScaled.Joints[bo.StartJoint], skToBeScaled.Joints[bo.EndJoint]);
distanciaDestino = FisioKinectCalcs.Distance3DBetweenJoint(skDestiny.Joints[bo.StartJoint], skDestiny.Joints[bo.EndJoint]);
if (distanciaOrigem > 0 && distanciaDestino > 0)
{
fator = (distanciaDestino/distanciaOrigem);
newJoint = skToBeScaled.Joints[bo.EndJoint]; // escaling only the end joint as the BoneOrientatios starts from HipCenter, i am scaling from center to edges.
// applying the new values to the joint
pos = new SkeletonPoint()
{
X = (float)(newJoint.Position.X * fator),
Y = (float)(newJoint.Position.Y * fator),
Z = (float)(newJoint.Position.Z * fator)
};
newJoint.Position = pos;
skToBeScaled.Joints[bo.EndJoint] = newJoint;
}
}
return skToBeScaled;
}
每一個似乎除了手做工精細和腳子
看這個圖片
我有我自己的骨架在我身上,還有我的骨架sc對另一個人的大小,但手和腳仍然瘋狂。 (但代碼看起來不錯)
任何建議?
剛剛意識到這個年齡......非常遲到了!我認爲你的問題源於試圖在運行中縮放骨架,同時仍然使用它來計算原始距離。創建一個可以在最後返回的第三個縮放骨骼。不要修改循環中的原始關節位置,因爲您需要它們保持正確的距離計算。 – zeFrenchy