レンダラーの深さをクリアして、3つのシーンをオーバーレイ目的で使用して、StereoEffectを使用してThree.jsアプリケーションを作成しました。 (この方法を使用するとThree.js - Geometry on top of another)。THREE.js VREffectで複数のシーンをレンダリングする方法
ただし、WebVR Polyfillを使用して、ギア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は正常に動作します)。問題は、renderer.clear()
またはrenderer.clearDepth()
は、シーン3のいくつかの要素を除いて、キャンバスがピッチブラックであるため、効果がないということです。
さらに、シーン2とシーン3のレンダリングをコメントアウトすると、最初のシーンのすべてが正しく表示され、正しく表示されます。
VREffectとStereoEffectのコードを調べると、どの部分が私の変更を無駄にしているのか分かりませんでした。
助けてください/ヒントは非常に高く評価されるでしょう。
は 'render()'関数の一部として 'rendererer.clear()'をすべて呼び出す 'VREffect'や' StereoEffect'などで引き起こされたやや似たような問題を抱えていました。 'renderer.autoClear = false'を設定するとあなたの場合に役立つかどうかテストできますか? (https://github.com/mrdoob/three.js/blob/master/examples/js/effects/VREffect.js#L376を参照してください)*編集:ちょうどあなたがそれを設定したことに気付きました。申し訳ありません* –
物事を試している間、私はレンダラーを置く。scene2とscene3の前でclear()を実行すると、VRモード(シーン3の内容は黒い背景)をアクティブにしたときと全く同じ出力を得ることができたので、どこかより深く、レンダラがクリアされています。 VREffectではなく、コード内に(WebGLRendererのドキュメントに続く)何もないので、それが実行されていることを示しているとは思わない。 @MartinSchuhfußrenderer.autoClearはfalse(console.logで確認)に設定されているため、トリガーしてはいけません。 VREffectからコメントアウトしてみました。 –