THREE.js - 相对于具有旋转/缩放父级的屏幕的移动对象

时间:2013-01-16 05:02:44

标签: javascript three.js webgl

在THREE.js中,我试图根据鼠标位置在屏幕上移动物体。在看了一些examples后,它似乎相当紧张。以下是我从其中一个主要用于我需要的示例中借用的一些代码:

function mouseMove(e){
    mouse2D.x = ( (e.pageX-canvas.offsetParent.offsetLeft) / canvas.clientWidth ) * 2 - 1;
    mouse2D.y = - ( (e.pageY-canvas.offsetParent.offsetTop) / canvas.clientHeight ) * 2 + 1;

    if (selected) {
      var ray = projector.pickingRay(mouse2D, PGL._camera).ray;
      var targetPos = ray.direction.clone().addSelf(ray.origin);
      targetPos.subSelf(_offset);

      obj.position.x = initPos.x + targetPos.x;
      obj.position.y = initPos.y + targetPos.y;
    }
  }

这适用于在场景中移动直接孩子。问题是尝试移动具有旋转和/或缩放的父对象的对象。你会怎么处理?将对象matrixRotationWorld应用于运动可能吗? 我仍然试图绕过这些东西。任何帮助表示赞赏。