在libgdx中,当使用具有多个节点(其中一个是“Hips”)的Model到ModelInstance执行以下代码时:
Matrix4 mtr4 = new Matrix4().idt();
mtr4 = modelInstance.getNode("Hips").globalTransform.cpy();
mtr4 = mtr4.translate(deltaVector3);
modelInstance.getNode("Hips").globalTransform.set(mtr4);
//now, mtr4 still has the same value when:
mtr4 = modInstance.getNode("Hips").globalTransform.cpy();
modelInstance.calculateTransforms();
//after following, mtr4 will be reset to before it was translated with deltaVector3
mtr4 = modInstance.getNode("Hips").globalTransform.cpy();为什么mtr4值被设置回来?calculateTransforms()方法不是“应用”了分配给节点的内容吗?
发布于 2017-01-22 04:59:34
引用calculateTransforms方法的documentation:
递归地计算此模型中所有Node实例的局部和世界变换。首先,根据每个节点的平移、旋转和缩放来计算每个Node.localTransform变换。然后,根据父节点的世界变换和每个节点的局部变换来计算每个Node.calculateWorldTransform()。最后,相应地更新动画骨骼矩阵。
如果修改了节点的任何局部属性(平移、旋转、缩放),则此方法可用于重新计算所有变换。
因此,当您调用calculateTransforms方法时,localTransform和globalTransform确实被重新计算(并因此被覆盖)(方法的命名在这一点上是显而易见的)。
如果要直接使用矩阵,而不是translation、scale和rotation成员,则有两个选择:
calculateTransforms方法,或者isAnimated成员设置为true以通知calculateTransforms方法应该重新计算该特定节点的矩阵。为此,您应该改为修改localTransform成员。如果您不想让Node继承其父转换,那么您可以将inheritTransform成员设置为false。
https://stackoverflow.com/questions/41781960
复制相似问题