JS フィドル: http://jsfiddle.net/Nfw9M/1/
私は行列演算の複雑さを学んでおり、探している結果にはあまり進んでいないので、この質問についてはご容赦ください。
私が持っているのは、THREE.Object3D
内部に 3 つのキューブ メッシュがあるものです。オブジェクト グループは任意の方向に任意に回転できますが、オブジェクトをクリックしてドラッグするときのマウスの動きの正規化されたベクトル方向を見つける必要があります。
説明するために、いくつかの画像を作成しました。このイメージでは、オブジェクトは X 軸で 90 度回転しています。ユーザーは黒い立方体の面を左から右にドラッグします。
これで私がしなければならないことは、オブジェクトがまったく回転されなかった場合にその動きがどうなるかを理解することです. この場合、ユーザーはグループの一番上の面を左から右にドラッグします。
私の研究から、私がする必要があるのは次のことだと思います:
- グループの逆行列を取得する
- 2 つのマウスの動きの間のベクトルの差を見つけます。
- これらのベクトルを元の逆数に対して乗算します
- ノーマライズ?
残念ながら、私は立ち往生しています。次の交差点コードがあります。
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 を乗算することはできますか?
私がやろうとしていることはかなり複雑だと思います。私の知識にはいくつかのギャップがあり、タスクを完了することができません。ガイダンスをいただければ幸いです。
ありがとう!