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
Javascript three.js object3d操作顺序_Javascript_Three.js - Fatal编程技术网

Javascript three.js object3d操作顺序

Javascript three.js object3d操作顺序,javascript,three.js,Javascript,Three.js,我正在尝试使用three.js构建一个旋转木马。我加载了我的马模型,想克隆它8次,并将它以相等的间隔放在一个圆圈中。我知道我可以用数学,和sin和cos函数来做这件事,但我想尝试一些不同的东西,但我无法让它工作 基本上我想做的是把马放在一个地方,旋转旋转木马对象,然后把下一匹马放在同一个地方。我想如果我这样做,因为旋转木马在旋转,它会把每匹马放在旋转木马的不同位置 据我所知,最终发生的事情是,首先它添加所有的马(并让它们重叠),然后它进行所有的旋转。因此,我只看到一匹马。这是真的吗?什么能解释这

我正在尝试使用three.js构建一个旋转木马。我加载了我的马模型,想克隆它8次,并将它以相等的间隔放在一个圆圈中。我知道我可以用数学,和sin和cos函数来做这件事,但我想尝试一些不同的东西,但我无法让它工作

基本上我想做的是把马放在一个地方,旋转旋转木马对象,然后把下一匹马放在同一个地方。我想如果我这样做,因为旋转木马在旋转,它会把每匹马放在旋转木马的不同位置

据我所知,最终发生的事情是,首先它添加所有的马(并让它们重叠),然后它进行所有的旋转。因此,我只看到一匹马。这是真的吗?什么能解释这一点?我怎样才能解决这个问题

这是我的密码:

for(变量i=0;i
horseCopy,因此horseCopy是一个3.Object3D。我试着让merryGoRound成为一个3.Object3D或3.Group,但他们都给出了相同的结果


如果您将一个对象a添加到另一个对象b(无论是
THREE.Group
还是任何其他
THREE.Object3D
),将非常感谢您的帮助,a的位置始终被解释为相对于对象b的原点和变换。这就是拥有这个层次结构的全部意义(否则,当父对象旋转时,对象无法与父对象一起旋转,旋转木马将非常无聊)

您想要的是指定世界空间中的坐标(“无论旋转木马如何旋转,这就是我希望马的确切位置”),并将此位置重新解释为相对于旋转木马的位置。您可以在three.js中使用
worldToLocal
-函数来实现这一点

在你的例子中:

var position = new THREE.Vector3(0,0,MERRY_GO_ROUND_RADIUS);
for(var i = 0; i < NUM_HORSES; i++){
  var horseCopy = horse.clone();

  merryGoRound.rotateY(-2 * Math.PI / NUM_HORSES);
  merryGoRound.updateMatrixWorld();

  // set the position in worldspace-coordinates
  horseCopy.position.copy(position);
  // convert from worldspace to objectspace
  merryGoRound.worldToLocal(horseCopy.position);
  merryGoRound.add(horseCopy);
}
scene.add(merryGoRound);
var位置=新的三个向量3(0,0,旋转木马半径);
对于(变量i=0;i
谢谢您的帮助!我想我理解你说的话,但我试过你说的话,但仍然与马重叠。我还试着替换horseCopy.position.copy(position)
//horse.translateZ(旋转木马半径)再一次,这使得它做了一条直线的马(所以它没有旋转旋转木马,或者类似的东西,我不确定)。关于我可能做错了什么有什么想法吗?非常抱歉,我没有指出您需要调用UpdateMatrix World才能使worldToLocal正常工作。另请参见工作示例非常感谢!这对我来说是可行的,但这并不完全是我所想的,所以只是出于好奇——当我们旋转欢乐猎犬时,我们为什么还需要单独旋转马呢?马应该和欢乐的猎犬一起旋转吗?起初,我想通过旋转merrygoround来实现这一点,是因为我认为这样可以节省马的旋转,因为它们会一起旋转。worldToLocal只会更新位置,而不是旋转,所以你必须自己处理。