我正在尝试开发一种网络体验,允许用户在整个体验中在前后摄像头之间切换,同时在使用SLAM / 6dof的同时使用后摄像头。理想情况下,我想使用PlayCanvas,但无法使前置摄像头正常工作。在框架内实现此功能方面,我取得了一些成功,但是很多事情正在中断。
我找不到有关启用前置摄像头并使用XR.stop()以及XR.run({Canvas:document.getElementById('camerafeed'),cameraConfig:{方向:XR .XrConfig.camera()。FRONT}})没有任何作用。
在a帧内,我正在执行类似的事件序列,但看到了一些结果。前置摄像头已激活,但是日志中有错误,没有渲染3D对象(当我们在前置摄像头模式下启动时会渲染),并且尝试再次切换摄像头会显示“糟糕,出了点问题!”屏幕。
至于切换SLAM / 6dof,我一直收到一个错误,即执行XR.run后无法更改disableWorldTracking。即使我已经运行XR.stop函数并侦听了stopxr事件。
应该切换到前置摄像头的A帧功能(仅重要位):
init: function() {
this.el.sceneEl.addEventListener('stopxr', event => {
console.log("AR has been stopped.");
const videoCanvas = document.querySelector('canvas.a-canvas');
XR.XrController.configure({disableWorldTracking: true});
XR.run({canvas: videoCanvas, cameraConfig: {direction: XR.XrConfig.camera().FRONT}});
});
},
switchToFace: function() {
this.el.sceneEl.emit('stopxr');
//XR.stop();
},
在场景运行时更改disableWorldTracking参数的正确方法是什么? 在场景运行时在前后摄像头之间切换的正确方法是什么?
答案 0 :(得分:1)
与第8名Wall开发人员交谈后,他们确认每页仅支持一个XR会话,因此在XR.stop之后,将无法再次调用XR.run。但是,还有另一种方法可以在前后摄像头之间切换,并且可以启用SLAM。
onCameraStatusChange
事件,并获取对stream
和video
元素的引用。XR.pause()
暂停第8面墙。stream
中的所有曲目。navigator.mediaDevices.getUserMedia(constraints);
获取所需摄像机的视频流。video
元素。playing
事件,然后调用XR.resume();
需要注意的一件事:SLAM仅在您从后置摄像头开始时才起作用。切换到前后摄像头后,SLAM将不再起作用。
答案 1 :(得分:1)
现在可以停止和恢复XR会话(从13.1版本开始)。您可以先调用XR8.stop(),再调用XR8.run()并传递新的所需摄像机方向。
如果您在AFrame项目中使用第8墙,则只需从xrweb
中删除<a-scene>
组件即可停止XR,然后再添加回XR(带有新的cameraDirection
参数,然后重新启动。
以下一些项目说明了如何翻转相机方向: