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

正如您所发现的,从 API中,Camera 对象的 lookAt() 方法被定义为使用世界位置。这似乎是比较常见的处理事情的方式。

我对three.js API不是特别熟悉,但似乎如果您想获取ball的全局位置,您可以使用以下内容:

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

希望这能让你更接近你的目标。不幸的是,您的小提琴似乎(非常)不确定,因此我无法快速为您找到 100% 的解决方案。

于 2013-07-26T10:49:42.630 回答
0

如果您查看 的代码Object3D.lookA(),您将看到

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

如果母船位于原点且未旋转,则您的代码有效。

更新小提琴:http: //jsfiddle.net/czGZF/4/

三.js r.59

于 2013-07-26T15:14:36.333 回答