StereoEffect + Multiple Scenes = No

时间:2015-10-25 10:38:39

标签: three.js

我有两个场景:scene1和scene2。我有两个摄像头:camera1和camera2

  • scene1是背景并使用camera1
  • scene2模拟平视显示器并使用camera2(因此对camera1 FOV的更改不会影响元素位置)

当不使用StereoEffect时,我可以在scene1的顶部渲染(复合)scene2。

然而,当使用StereoEffect时,我无法在scene1的顶部渲染场景2。 StereoEffect仅渲染单个场景和单个摄像机。它似乎无法将多个场景渲染(复合)在彼此之上。我也尝试创建多个渲染器,例如renderer2,我将其应用于StereoEffect - 例如stereo = new THREE.StereoEffect(renderer2),但这也无效。

想法?

1 个答案:

答案 0 :(得分:1)

我知道您希望在主场景的所有画布上渲染一次,并在底部中心渲染一次以进行平视显示。 THREE.StereoEffect确实只要求一个场景,并获得立体声效果。它不是为你所描述的而写的。

它使用scissors在左侧渲染一次,然后在画布的右侧渲染。剪刀允许您更改要绘制的画布区域。正如您在THREE.StereoEffect的来源中看到的那样:

renderer.setScissor( 0, 0, _width, _height );
renderer.setViewport( 0, 0, _width, _height );
renderer.render( scene, _cameraL );

renderer.setScissor( _width, 0, _width, _height );
renderer.setViewport( _width, 0, _width, _height );
renderer.render( scene, _cameraR );

setScissorsetViewport方法的四个参数是开始横坐标(从左侧),开始纵坐标(从底部) ),宽度,高度(所有参数都是像素数)

了解这一点,您可以使用剪刀满足您的需求,而不需要THREE.StereoEffect。所以首先写下代码的第一部分:renderer.enableScissorTest(true)。然后在你的循环中,用你需要的东西复制上面的代码:剪刀和视口覆盖你的第一个渲染的所有屏幕,然后只覆盖第二个的抬头部分。