0

だから当初、私は自分の小さな「船」にターゲットを追跡する砲塔を持たせたかったのです。これはそのためのjfiddleです。http://jsfiddle.net/czGZF/2/彼らが追跡するとき、彼らは奇妙な行動をします。このコードによって、砲塔がその横 (原点) にわずかにあると認識していることに気付きました。

turret_a.position.y = .25;
turret_a.position.z = 2;

しかし、私はそれを行ったので、「ベースシップ」に追加するために(以下で)呼び出したときの相対的な位置になる可能性があります

ship = new THREE.Object3D();
ship.add( ship_base );
ship.add( turret_a ) ;

turret_a が船に追加された後にその位置を変更したとき、船がシーンに追加された後、砲塔はほとんどどのように見えるかを追跡しました。

私の質問は、lookAt() 関数が必要な回転角度を決定するために、親オブジェクトの現在の位置ではなく、その古い位置を使用するのはなぜですか?

4

2 に答える 2

0

のコードを見るとObject3D.lookA()

// This routine does not support objects with rotated and/or translated parent(s)

親船が原点にあり、回転していない場合、コードは機能します。

更新されたフィドル: http://jsfiddle.net/czGZF/4/

three.js r.59

于 2013-07-26T15:14:36.333 に答える
0

API から、 Camera オブジェクトの lookAt() メソッドは、発見したように、ワールド位置を使用するように定義されています。これは物事を処理するための比較的一般的な方法のようです。

特にthree.js APIには詳しくありませんが、ボールのグローバル位置を取得したい場合は、次を使用できるようです:

var targetPos = ball.position.clone();
ball.localToWorld(targetPos);

それがあなたの目標に近づくことを願っています。残念ながら、あなたが持っているフィドルは (非常に) 非決定的であるように思われるので、すぐに 100% の解決策を得ることができません。

于 2013-07-26T10:49:42.630 に答える