将 Threejs 网格移动到另一个网格的中心

问题描述 投票:0回答:0

我的场景中有以下结构(从 glb 导入):

我尝试将网格 svgGroupsvg_test 移动到名为 M_Top 的网格中心(红叉是预期位置)。

这是我的代码:

function engraveSVG(object, value) {
    //object is the name of the target mesh
    var svgMeshName = 'svgGroup' + value
    loadSVGandFit(svgMeshName, object, value).then(res => {

        var svgMesh = scene.getObjectByName(svgMeshName);              
        svgMesh.scale.set(0.1, 0.1, 1)

        const axesHelper = new THREE.AxesHelper( 20 );
        svgMesh.parent.add(axesHelper)

        moveCenterMeshToOtherMeshCenter(svgMesh, scene.getObjectByName(object))
    })
}

我尝试了以下功能:

function moveCenterMeshToOtherMeshCenter(centerMesh, otherMesh) {
    // get the center positions of both meshes in the local world
    const centerMeshPosition = new THREE.Vector3();
    const otherMeshPosition = new THREE.Vector3();
    centerMesh.getWorldPosition(centerMeshPosition);
    otherMesh.getWorldPosition(otherMeshPosition);

    // calculate the difference between the center positions of both meshes
    const difference = otherMeshPosition.sub(centerMeshPosition);

    // translate the center mesh by the difference
    centerMesh.translateX(difference.x);
    centerMesh.translateY(difference.y);
    centerMesh.translateZ(difference.z);
}

function moveCenterToOther(centerMesh, otherMesh) {
    const centerBox = new THREE.Box3().setFromObject(centerMesh);
    const otherBox = new THREE.Box3().setFromObject(otherMesh);

    const centerPosition = centerBox.getCenter(new THREE.Vector3());
    const otherPosition = otherBox.getCenter(new THREE.Vector3());

    const offset = new THREE.Vector3().subVectors(otherPosition, centerPosition);
    centerMesh.position.add(offset);
}

有什么问题吗?获取中心返回一个 0 左右的值。

我选择将 svg 网格添加到目标网格的同一组中。但它没有任何改变。

坐标轴也在局部坐标系中。

任何帮助将不胜感激。

three.js mesh
© www.soinside.com 2019 - 2024. All rights reserved.