我使用 StereoEffect 编写了 Three.js 应用程序,通过清除渲染器深度使用 3 个场景进行叠加。(使用这种方法Three.js - Geometry on another)。
但是,我现在需要使用 VREffect,以便更好地兼容 Gear VR 等头显,使用 WebVR Polyfill。
以下是代码片段,以显示其设置方式:
const renderer = new THREE.WebGLRenderer({antialias: false})
renderer.setSize(window.innerWidth, window.innerHeight)
renderer.autoClear = false;
document.body.appendChild(renderer.domElement)
effect = new THREE.VREffect(renderer)
effect.separation = 0
effect.setSize(window.innerWidth, window.innerHeight)
let vrDisplay
navigator.getVRDisplays().then(displays => {
if (displays.length > 0)
vrDisplay = displays[0]
})
// Add button to enable the VR mode (display stereo)
const vrButton = VRSamplesUtil.addButton("Enter VR", "E", "/vr/cardboard64.png", () => {
vrDisplay.requestPresent([{source: renderer.domElement}])
})
...其余的代码...
在我的动画循环中:
renderer.clear()
effect.render(scene, camera)
renderer.clearDepth()
effect.render(scene2, camera)
effect.render(scene3, camera)
但是,这种方法在使用 VREffect 时似乎不起作用(仅在进入 VR 模式时 - EG 在我的桌面上查看它可以正常工作)。我认为问题在于renderer.clear()
orrenderer.clearDepth()
没有生效,因为画布是漆黑的,除了场景 3 中的一些元素。
此外,在注释掉场景 2 和场景 3 的渲染时,我可以很好地看到第一个场景中的所有内容,并且正确渲染。
查看 VREffect 和 StereoEffect 中的代码,我无法弄清楚哪一部分使我的更改无用。
任何帮助/提示将不胜感激。