Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.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,我想保持场景中某个对象的位置,并想将该对象的父对象从场景更改为任何其他网格 在本例中,当我尝试将球体添加到长方体时,它的位置正在更改。我希望保持原始位置。尝试删除第35行中的注释,球体正在向长方体移动。我希望保持其位置并使球体成为长方体的子对象 如果将球体添加到组中,只需从球体的位置减去组的位置,即可将其保持在原始世界位置 var material=new THREE.MeshLambertMaterial({color:0x00ff00}); var-boxGeometry=new-THRE

我想保持场景中某个对象的位置,并想将该对象的父对象从场景更改为任何其他网格

在本例中,当我尝试将球体添加到长方体时,它的
位置正在更改。我希望保持原始位置。尝试删除第35行中的注释,球体正在向长方体移动。我希望保持其位置并使球体成为长方体的子对象

如果将球体添加到组中,只需从球体的位置减去组的位置,即可将其保持在原始世界位置

var material=new THREE.MeshLambertMaterial({color:0x00ff00});
var-boxGeometry=new-THREE.boxGeometry(5,15,5);
var box=新的三个网格(长方体几何体、材质);
var球化法=新的三种球化法(5,32,32);
var sphere=新的三个网格(球体测量法,材质);
球面位置设置(0,10,0);
sphere.updateMatrix();
var group=new THREE.Object3D();
translateX组(6);
group.updateMatrix();
//如果将球体添加到组对象中
组。添加(框);
组。添加(球体);
场景。添加(组);
var m=new THREE.Matrix4().getInverse(group.matrixWorld);
球体。应用矩阵(m);
//如果将球体添加到长方体
组。添加(框);
框。添加(球体);
场景。添加(组);
var m=new THREE.Matrix4().getInverse(box.matrixWorld);
球体。应用矩阵(m);
console.log(group.position,sphere.position);

如果问题仅依赖于
位置
,则Brakebein的答案可能是正确的。但如果您还需要恢复
缩放
旋转
,那么您应该这样做,我认为:

var inversionMatrix = new THREE.Matrix4();
inversionMatrix.getInverse( parentObject.matrix );
childObject.applyMatrix(inversionMatrix);

我不想组成一个小组。我想将另一个网格的一个子网格移动到一起。当我试图将子网格添加到父网格时,子网格位置正在移动。parent.add(child)当我这样做时,我想保留parent和childWell的位置比例和旋转。我说的是group,因为在您名为
THREE.Object3D
的plunker中,group
。您将长方体和球体添加到该组中。但是父对象是什么并不重要。您始终需要获取父级矩阵。所以,为了保持位置、旋转和缩放,凯戈罗多夫的回答是正确的。我也更新了我的答案。谢谢你的回答。我正在尝试所有这些使用collada加载的模型,但它不在那里工作。并且子对象正在根据父参考轴移动。但是我想根据世界坐标对子对象进行平移。我是webGl和three.js的新手。你能推荐一些好书或我的指导教程对我很有帮助,因为我对three.js不太了解。如果您下载整个Three.js包,在许多方面也有很多示例。对我来说,如果我想使用一个特定的特性,这些都是非常有用的。