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