如果我没有给摄像头设置初始位置,WEB borwser和Oculus Go浏览器的表现是不同的(见下图)。
const camera = new THREE.PerspectiveCamera( 45, width / height, 1, 1000 );
// camera position is Vector3(0, 0, 0)
scene.add( camera );
图1--WEB浏览器中摄像头的初始位置 1 - WEB浏览器(如谷歌浏览器)中的初始摄像头位置。
图2 - VR浏览器中的初始摄像头位置(如Oculus Go的默认浏览器)。2 - VR浏览器中的初始摄像头位置(例如Oculus Go的默认浏览器)。
它看起来像 Three.js
的场景知道它在哪个环境中运行,并自动调整摄像机的位置。我怎样才能改变摄像机的初始位置?
目前,我正在做这样的思考。
const cameraHolder = new Group();
cameraHolder.add(camera);
cameraHolder.position.set(0, 1, 0);
scene.add(cameraHolder);
但还是不能解决在不同环境下摄像机位置不同的问题。
我相信这是参考空间的行为。如果你使用参考空间类型为 *-floor
设备知道你的身高。摄像机的y被设置为你的设备的y位置,这是有道理的。由于我找不到从哪里抓取设备的高度,我只是将参考空间类型设置为本地。
this.renderer.xr.setReferenceSpaceType( 'local' );
对我来说 scene.add(cameraHolder)
是必要的,否则摄像机就无法接收到位置旋转。老式HMD的摄像头连接在一个 "头 "模型上,然后你会转动头部而不是摄像头。