0

在 Three.js 中,如何在改变父对象旋转的同时保持一个子对象静止?我有一个关节机器人模型,其根节点是躯干(Body_Torso),但我试图让脚(Body_RAR)“接地”。显而易见的方法(计算脚的矩阵变换,并将其应用于躯干)产生了非常奇怪的结果,似乎与时间有关。这是我的代码:

// Hold the foot in place!
footMatrix = new THREE.Matrix4();
footMatrix.copy(hubo.links.Body_RAR.matrixWorld);

function fixFoot() {
  // Rotate the whole shebang so that the foot is the "grounded" object.
  a = new THREE.Matrix4();
  a.getInverse(hubo.links.Body_RAR.matrixWorld);
  b = new THREE.Matrix4();
  b.multiplyMatrices(a,footMatrix);
  hubo.links.Body_Torso.applyMatrix(b);
  hubo.canvas.render();
}

或某种程度的东西。Object3D.applyMatrix() 是异步的吗?我只是得到非常奇怪的结果。如果我只计算一次,它似乎做了正确的事情,但如果我尝试将它连接到一个滑块,脚的位置就会有很多“抖动”。有时机器人会从页面上消失。有没有更好的方法来尝试实现我的目标?

编辑: 这是一个活生生的例子:http ://wmhilton.github.io/hubo-js/examples/sliders/sliders.html

重现步骤:

  1. 检查“测试版:保持左脚固定”。复选框。
  2. 尝试改变“Left Hip Yaw”。慢慢移动,很顺畅。动作太快了,很牛逼。
  3. 取消选中“保持脚固定”。
  4. 抬起“Left Hip Pitch”,使他以 90 度踢。
  5. 重新检查“保持脚固定”。
  6. 移动“左臀部偏航”。事情变得疯狂,机器人飞走了。
4

1 回答 1

1

我可以更轻松地使用 Object3D 层次结构并更改子.rotation属性,而不是应用矩阵,例如这个机器人手臂模拟http://dimitriipokrovskii.appspot.com/robot_arm_joints.html

于 2013-10-25T23:24:27.300 回答