three.js Object3D本地位置,与全球位置对比

时间:2013-07-26 08:52:00

标签: javascript 3d three.js

所以最初我希望我的小“船”有一个跟踪目标的炮塔。这是它的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()函数使用它的旧位置,而不是它当前在其父对象上的位置来确定它需要的旋转角度?

2 个答案:

答案 0 :(得分:0)

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

我并不熟悉three.js API,但看起来如果你想获得球的全球位置,你可以使用以下内容:

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

希望这能让你更接近你的目标。不幸的是,你的小提琴似乎(非常)不确定,所以我不能很快为你获得100%的解决方案。

答案 1 :(得分: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