レンダラーの深度をクリアすることで、重ね合わせの目的で 3 つのシーンを使用して、StereoEffect を使用して Three.js アプリケーションを作成しました。(このアプローチThree.js - Geometry on anotherを使用)。
ただし、WebVR Polyfill を使用して、Gear VR などのヘッドセットとの互換性を高めるために、VREffect を使用する必要があります。
以下は、セットアップ方法を示すコードのスニペットです。
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 をデスクトップで表示すると正常に動作します)。問題は、シーン 3 の一部の要素を除いて、キャンバスが真っ暗であるため、 renderer.clear()
orが有効になっていないことだと思います。renderer.clearDepth()
さらに、シーン 2 とシーン 3 のレンダリングをコメント アウトすると、正しくレンダリングされた最初のシーンのすべてを完全に確認できます。
VREffect と StereoEffect のコードを調べたところ、どの部分が私の変更を役に立たなかったのかわかりませんでした。
どんな助け/ヒントも大歓迎です。