Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vector Three.js-上方向向量如何与lookAt()配合使用?_Vector_Three.js_Linear Algebra - Fatal编程技术网

Vector Three.js-上方向向量如何与lookAt()配合使用?

Vector Three.js-上方向向量如何与lookAt()配合使用?,vector,three.js,linear-algebra,Vector,Three.js,Linear Algebra,我试图理解上方向向量和lookAt()在three.js中是如何协同工作的。我正在设置这个axisHelper的上方向向量,以便Y轴始终指向目标geo,它标记上方向向量的位置。它在X轴和Y轴上按预期工作,绕Z轴旋转轴;当我尝试调整上方向向量的Z值时,我希望轴围绕X轴旋转,但什么也没发生 [编辑:我添加了地理位置以显示向上的目标位置。] 我有一个dat.gui界面来操作上方向向量进行演示,但是当我手动设置向量时,问题也存在 我怀疑问题出在74号线附近: zControl.onChange(fun

我试图理解上方向向量和lookAt()在three.js中是如何协同工作的。我正在设置这个axisHelper的上方向向量,以便Y轴始终指向目标geo,它标记上方向向量的位置。它在X轴和Y轴上按预期工作,绕Z轴旋转轴;当我尝试调整上方向向量的Z值时,我希望轴围绕X轴旋转,但什么也没发生

[编辑:我添加了地理位置以显示向上的目标位置。]

我有一个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,情况也是如此:)

我猜你的头衔是指在Z轴而不是X轴上旋转

不管怎样,罪魁祸首似乎是axes.lookAt(新的3.Vector3(0,0,1))对于所有方法,则Y不会按预期旋转。您正在告诉轴辅助对象向下查看特定轴(在您的示例Z中)。因此Z值不起作用

有没有一个例子可以说明你试图实现的目标可能会对我们有所帮助


也许其他人可以对正在发生的事情给出更深入的解释。希望我的回答会把你推向正确的方向。

当你调用
对象时。看(向量)
,对象会旋转,使其内部z轴指向目标
向量

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

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

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

3.js r.63



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

以下是我如何理解这个问题的:

“注视”和“向上”向量确定对象的方向,如下所示:

  • 首先应用注视向量,该向量设置X和Y旋转,锁定对象Z轴点的方向
  • 然后,上方向向量确定对象如何围绕Z轴旋转,以设置对象Y轴点的方向——它根本不会影响X轴和Y轴的旋转
  • 在我的示例中,axisHelper沿着lookAt向量的方向向下查看其蓝色Z轴,该向量是(0,0,-1)处的空间点,因此已经设置了X和Y旋转。剩下要做的唯一一件事就是弄清楚如何围绕Z轴旋转axisHelper,这意味着设置上方向向量的X和Y点——沿Z轴前后移动上方向向量不会改变任何东西

    这里有一个演示了这种关系的小提琴:蓝色箭头是注视轴,绿色箭头是向上轴


    在链接的示例中,可以看到调整X和Y值会旋转Z轴上的轴,因此Y轴始终指向目标。调整Z值应在X轴上旋转轴。我会澄清一下这个问题。@meetar啊,你的权利,我混淆了价值观和轴心的措辞。现在这更有意义了。您的示例总是指向Z并在Z上旋转,这就是为什么调整Z不会旋转它。您是否试图使轴辅助对象旋转到由UI控制的球体上?我不确定是否理解您的推理-我向下看Z轴,因为这就是Y轴“向上”的方式。如果您查看示例小提琴,您可以看到调整目标的Z值不会改变轴的X旋转,尽管我认为应该。因此,您没有错,但我直到@WestLangley发表评论后才明白-我至少会给您一个向上的投票。不用担心。我想@WestLangley最终会做出反应的。我应该澄清一下,但我很高兴你能弄明白!1.three.js中的轴应始终具有单位长度;确保调用axis.normalize()
    。2.为什么要将
    向量向上更改?这通常是不需要的。请修改你的帖子并解释。3.你想达到什么目标?请在你的帖子中解释一下。我只是想了解上向量和lookAt()是如何协同工作的。我会澄清这个问题。谢谢,这就是我如何理解上方向向量和lookAt()的工作原理,这就是为什么我对我在问题中描述的问题感到困惑,如链接的小提琴所示。在你的小提琴中,目标向量从未改变,所以z轴总是指向同一个方向。我理解这句话的两半,但不理解其中一个是如何从另一个开始的——我一定很难看到这个问题。我把“目标”理解为一个对象空间向量,“向上”理解为一个世界空间向量,正如你所说:这两个向量决定了对象的方向。如果上方向向量的Z值发生变化,对象的方向不会随之改变吗?又喝了一杯咖啡,但多亏了你的评论,我发现了我假设中的缺陷——目标向量在世界空间中,而我的心智模型不正确。要清楚的是:上方向向量和注视方向向量都在世界空间中吗?在这篇评论中,@mrdoob似乎在说上方向向量在物体空间中,但那是2年前的事了…
    
     Links to jsfiddle.net must be accompanied by code