我找到了一种在 VR 中始终将对象保持在摄像机正前方的方法:我不会将其直接添加到场景中,而是添加到摄像机中(然后将其与其子级一起添加到场景中)。通过这样做,如果我移动头部,该物体总是位于我的正前方:
const object = new THREE.Mesh(geometry, material)
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 0.1, 100)
scene.add(camera)
camera.add(object)
object.position.set(0,0,-1)
现在,我希望它仅位于左镜头前面,而不是在立体视图中将其放置在我的正前方(在 HMD 中用双眼观看它时)。
我了解到,即使我们在场景中处理单个相机,ThreeJS 也会通过内部的“左相机”和“右相机”为每只眼睛渲染场景 2 次(以在 HMD 中创建立体效果),所以我尝试向场景中的对象添加偏移量以匹配左相机的偏移量:
object.position.set(-0.057,-0.08,-1)
它有点工作,但它当然不准确,仅基于我的判断和调整其位置的一些迭代。
我如何才能准确地知道必须设置的偏移量才能使其 100% 位于左镜头前面(垂直和水平)?我试图动态找到那些内部摄像头的位置,但我找不到它。
也许尝试使用 onBeforeRender 事件。它有渲染器、场景、相机、几何体、材质、组。然后想办法看看哪个摄像头在左边,哪个在右边。