Three.js-移动对象到新的父容器并应用变换

/**
 * 把一个对象移动到另一个父容器,并应用变换
 * @param mesh 移动的对象
 * @param newParent 要移动到的父容器
 */
const moveMesh = (mesh: THREE.Object3D, newParent: THREE.Object3D) => {
    // 1. 获取世界矩阵
    mesh.updateWorldMatrix(true, true)
    const worldMatrix = mesh.matrixWorld.clone()

    // 2. 解除父级关系
    mesh.parent?.remove(mesh)

    // 3. 添加到新父级
    newParent.add(mesh)

    // 4. 更新新父级矩阵
    newParent.updateWorldMatrix(true, true)

    // 5. 计算相对矩阵(核心)
    const inverseParentMatrix = new THREE.Matrix4().copy(newParent.matrixWorld).invert()
    goods.matrix.multiplyMatrices(inverseParentMatrix, worldMatrix)
    goods.matrix.decompose(goods.position, goods.quaternion, goods.scale)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容