1

我正在尝试使立方体网格始终位于 XR 相机前面。

无论我如何移动手机摄像头,立方体都应该出现在摄像头的正前方,只显示立方体的一侧。

首先,我在一开始就在场景中添加了一个立方体网格:

material = new THREE.MeshLambertMaterial({ color: 0x9797CE });
box = new THREE.Mesh(new THREE.CubeGeometry(1, 1, 1), material);
box.position.set(0, 0, -3);
scene.add(box);

然后尝试在 XR 摄像头前画出方框:

function animate() {
    let xrCamera = renderer.xr.getCamera(camera);
    box.position.set(xrCamera.position.x, xrCamera.position.y, xrCamera.position.z - 3);
    box.rotation.set(xrCamera.rotation.x, xrCamera.rotation.y, xrCamera.rotation.z);
    renderer.render(scene, camera);
}

当我运行代码时,立方体出现在我的手机摄像头前。

但是当我旋转手机时,立方体会在不跟随相机的同一位置旋转。

我也尝试过xrCamera.add(box),但它似乎不起作用。

如何正确地使立方体始终出现在 XR 相机前?

4

1 回答 1

1

重要的是要知道当前 ( r115) 变换属性position以及XR 相机rotationscale局部矩阵没有更新。

因此,不要将框添加到xrCamera,而是将其添加到camera. 此外,请记住,WebXRManager.getCamera()它仅供内部使用,不属于公共 API。

于 2020-04-27T09:48:23.443 回答