Javascript 网格相对于其父网格的定位

Javascript 网格相对于其父网格的定位,javascript,three.js,Javascript,Three.js,我正在做一个项目,在这个项目中,我创建了一个3d小部件来旋转、缩放和平移网格。 我目前在定位用于缩放父网格的圆锥体时遇到一些问题。 这是我的代码: function createScaleWidget(mesh, constScale){ var bbox = new THREE.Box3().setFromObject(mesh); var material = new THREE.MeshBasicMaterial({ color: 0x0000ff

我正在做一个项目,在这个项目中,我创建了一个3d小部件来旋转、缩放和平移网格。 我目前在定位用于缩放父网格的圆锥体时遇到一些问题。 这是我的代码:

function createScaleWidget(mesh, constScale){
    var bbox = new THREE.Box3().setFromObject(mesh);
    var material = new THREE.MeshBasicMaterial({
        color: 0x0000ff
    });
    var coneGeom = new THREE.CylinderGeometry(0, constScale, 10, 50, 20, false);
    var cone = new THREE.Mesh(coneGeom,material);
    cone.position.y = bbox.max.y/2; //assuming all the objects are laid on the ground
    cone.position.z = bbox.max.z+10;
    cone.position.x = bbox.max.x+10;
    mesh.add(cone);
}
网格是我为其创建小部件的网格, cone是一个小部件。 我希望在Y的网格中有一个锥体。 在与边界框成一定角度的情况下,理想情况是将其放置在面向摄影机的面边界框的右侧。
可能我的问题是因为圆锥体是网格的子对象,因此最终位置不仅取决于bbox,还取决于网格本身的位置。

我猜您希望这样:

您是对的,您必须相对于其父位置定位圆锥体,在这种情况下-网格:

function createScaleWidget(mesh, constScale){
var bbox = new THREE.Box3().setFromObject(mesh);
var material = new THREE.MeshBasicMaterial({
    color: 0x0000ff
});
var coneGeom = new THREE.CylinderGeometry(0, constScale, 10, 50, 20, false);
var cone = new THREE.Mesh(coneGeom,material);
cone.position.y = bbox.size().y / 2;
mesh.add(cone);
}
当我做类似的事情时,这对我起了作用。圆锥体应放置在其中一个面旁边。要尝试另一张脸,您可以尝试:

cone.position.z = bbox.size().z / 2;

相反。

非常感谢,它工作得很好!不知道bboxes有这么大的功能你很好!如果你愿意的话,我可以批准我的问题P,对不起,我有点不知道