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-第一个子级跳转并采用父级转换_Javascript_Three.js - Fatal编程技术网

Javascript Three.js-第一个子级跳转并采用父级转换

Javascript Three.js-第一个子级跳转并采用父级转换,javascript,three.js,Javascript,Three.js,我正在使用three.js(RE:71)中的“.add()”方法在三个对象之间创建父/子层次结构。为两个对象创建父对象不会带来任何问题。但是,当我尝试创建一个三层层次结构时,中间的子对象会跳转到一个偏移量,该偏移量相当于其父对象相对于原点的偏移量 这是层次结构: 红盒(绿盒的父项)->绿盒(蓝盒的父项)->蓝盒 下图显示了在创建家长之前和之后应如何放置这些框: 如果框在设置为父对象时如何重新定位,则这是一个图像: 相关代码如下所示: var testObject_G1 = n

我正在使用three.js(RE:71)中的“.add()”方法在三个对象之间创建父/子层次结构。为两个对象创建父对象不会带来任何问题。但是,当我尝试创建一个三层层次结构时,中间的子对象会跳转到一个偏移量,该偏移量相当于其父对象相对于原点的偏移量

这是层次结构:

红盒(绿盒的父项)->绿盒(蓝盒的父项)->蓝盒

下图显示了在创建家长之前和之后应如何放置这些框:

如果框在设置为父对象时如何重新定位,则这是一个图像:

相关代码如下所示:

        var testObject_G1 = new THREE.BoxGeometry(50, 100, 100);
        var testObject_G2 = new THREE.BoxGeometry(100, 100, 50);
        var testObject_G3 = new THREE.BoxGeometry(50, 100, 100);

        var testObject_MR = new THREE.MeshBasicMaterial({ color: 0xff0000 });
        var testObject_MG = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        var testObject_MB = new THREE.MeshBasicMaterial({ color: 0x0000ff });

        var testObject_Mesh = new THREE.Mesh(testObject_G1, testObject_MR);
        testObject_Mesh.position.x = -100;

        var testObject_Mesh2 = new THREE.Mesh(testObject_G2, testObject_MG);
        testObject_Mesh2.position.x = 0;

        var testObject_Mesh3 = new THREE.Mesh(testObject_G3, testObject_MB);
        testObject_Mesh3.position.x = 100;

        testObject_Mesh2.add( testObject_Mesh3 );
        testObject_Mesh.add( testObject_Mesh2 );

        scene.add( testObject_Mesh );
这里有一把JS小提琴:


提前谢谢你。

你看到的是正确的。在层次结构中,子级将继承父级变换(继承是简化;它们的矩阵将相乘,但您只定义了转换,以便添加值)。因此testMesh(红色)将出现在x=-100处,testMesh2(绿色)也将出现在x=-100处(因为其x变换为0并将继承其父变换),testMesh3(蓝色)将出现在x=0处(因为-100+0+100=0)

将此添加到小提琴中,以查看相对变换

scene.add( new THREE.AxisHelper( 100 ));

所以按照这个逻辑,如果我想保持我的层次结构,并达到我想要的结果,我想让第二个孩子的位置等于它的当前位置和它的父母位置的差值:(0--100=100)。i、 e第二个孩子的位置将设置为x=100。对不起,我不明白。你实现了你所追求的目标吗?你想用小提琴吗?是的,谢谢你。