我试图了解up.vector和lookAt()在three.js中如何协同工作。我正在设置该axisHelper的向上矢量,以便Y轴始终指向目标地理位置,这标志着向上矢量的位置。它绕X轴旋转,如X和Y所预期的那样工作。当我尝试调整向上向量的Z值时,我希望轴绕X轴旋转,但是什么也没发生。

http://jsfiddle.net/68p5r/4/
[编辑:我添加了地理区域以显示向上目标位置。]

我有一个dat.gui界面来操纵向上向量进行演示,但是当我手动设置向量时也存在问题。

我怀疑问题出在第74行:

zControl.onChange(function(value) {
  axes.up.set(this.object.x, this.object.y, value);
  axes.lookAt(new THREE.Vector3(0, 0, 1));
});

更新向上矢量时,我指示axisHelper通过在其Z轴上重做其lookAt()来更新其在屏幕上的方向。更改X和Y可以按预期工作,为什么不更改Z?

(如果我使用geo而不是axisHelper:http://jsfiddle.net/68p5r/5/,也是这种情况)

最佳答案

调用Object.lookAt( vector )时,对象将旋转,使其内部z轴指向目标vector

但这还不足以指定对象的方向,因为对象本身仍可以在其z轴上“旋转”。

因此,将对象“旋转”,以使其内部y轴位于其内部z轴和up向量的平面中。

目标向量和up向量一起足以唯一地指定对象的方向。

three.js r.63

提示:three.js中的轴应始终具有单位长度;请确保在您的代码中调用axis.normalize()。

关于vector - Three.js-向上向量如何与lookAt()一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20506425/

10-13 07:04