一、相机投影矩阵与THREEjs不一致
原因:XR渲染时使用的相机存在左右平移、大小等变化
解决:使用 XRView 投影矩阵
//获得XR的投影矩阵
function _getXRProjectMat4() {
let xr = renderer.xr;
let xrFrame = xr.getFrame();
if(xrFrame) {
let viewerPose = xrFrame.getViewerPose(xr.getReferenceSpace());
let views = viewerPose.views;
return new THREE.Matrix4().fromArray( views[0].projectionMatrix );
}
}
二、相机世界矩阵等与实际不一致
原因:XR中的世界坐标全部被赋值在camera上(即camera.position等为世界坐标),当camera存在父级时会导致不一致
解决:手动计算世界矩阵
let matrixWorld = new THREE.Matrix4().compose(
camera.position,
camera.quaternion,
camera.scale
);