JS 小提琴:http: //jsfiddle.net/Nfw9M/1/
请在这个问题上多多包涵,因为我正在学习矩阵运算的复杂性,并且在我正在寻找的结果上还没有取得很大进展。
我有一个THREE.Object3D
里面有 3 个立方体网格。对象组可以在任何方向上任意旋转,但是我需要在单击并拖动对象时找到鼠标移动的归一化矢量方向。
为了说明,我创建了一些图像。在此图像中,对象在 X 轴上旋转了 90 度。用户将在黑色立方体的表面上从左向右拖动。
我需要做的是弄清楚如果对象根本没有旋转,那运动会是什么。在这种情况下,用户将在组的最上面从左向右拖动。
根据我的研究,我认为我需要做的是:
- 获取组的逆矩阵
- 找出两个鼠标移动之间向量的差异。
- 将这些向量与原始逆相乘
- 规范化?
不幸的是,我被困住了。我有以下交集代码:
function intersect(e) {
_vector.set((e.pageX / window.innerWidth) * 2 - 1, -(e.pageY / window.innerHeight) * 2 + 1, 0.5);
_ray.set(_camera.position, _vector.sub(_camera.position).normalize());
return _ray.intersectObjects(_cube.children);
}
这可以正常工作,但我不明白返回object.point
的值与什么有关。
我关于鼠标移动的代码是:
function mouseMove(e) {
var hit = intersect(e);
console.log(hit);
if (!hit[0]) return false;
var point = hit[0].point;
if (_last) {
var p = new THREE.Vector3();
p.add(point);
p.sub(_last);
//this is where I am stuck
}
_last = point;
}
我什至可以将 Vector3 和 Matrix4 相乘吗?
我认为我正在尝试做的事情相当复杂,而且我的知识存在一些空白,使我无法完成任务。我真的很感激任何指导。
谢谢!