在一个Android应用中,我想要画一个跑步的腿。为了输出腿的上部分,我可以执行以下操作:
// legCX,legCY is the location on screen about which the leg rotates.
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(legCX,legCY);
我将矩阵设置到画布上并绘制了腿部。如何在膝盖以下绘制腿的第二部分?它以不同于上面的腿的速率旋转,并且具有随着上面的腿移动的中心点。我尝试了以下方法,但结果是围绕某个单一点旋转,该点不跟随上面的腿移动。
Matrix m = new Matrix();
m.postTranslate(-legCX,-legCY);
m.postRotate(legRot);
m.postTranslate(0,-legLength);
m.postRotate(footRot);
m.postTranslate(0,legLength);
m.postTranslate(legCX,legCY);
我怀疑需要在两个不同的矩阵对象中进行两次旋转,然后以某种方式将它们合并,但我无法确定如何做到这一点。
编辑: 这种矩阵被称为“变换矩阵”。组合多个操作称为变换的组合。然而,在这个主题的所有页面中,都没有提到如何进行一系列平移和旋转。
如果您可以使用矩阵绕一个点进行旋转,那么肯定可以通过多个矩阵操作来实现绕一个点旋转,然后绕另一个点进行额外的旋转。
我尝试查看关于骨骼动画的页面,但是我无法理解他们在说什么。
legRot
操作。除了最内层的旋转外,其他所有操作都应该是完美平衡的。你可以通过在适当的位置添加相反的旋转,或者将前三个操作合并为一个矩阵,先应用该矩阵,然后再应用它的逆矩阵来实现这一点。如果这解决了你的问题,我会把这个评论改成一个答案。 - MvG