2016-11-05 80 views
1

我试图在两个不同的画布上创建两个场景。 Three.js中可能吗?不同画布上的多个场景

var scene1 = new THREE.Scene() 
var scene2 = new THREE.Scene() 
scene1.add(camera1) 
scene2.add(camera2) 

...

renderer.render(scene1, camera1) 
renderer.render(scene2, camera2) 

将它这样做呢?

+0

您是否尝试过? –

+0

不,但我在想。 –

回答

1

是的 - 这是完全可能的,但渲染器实例始终绑定到画布的WebGLContext。所以你需要为每个画布创建一个渲染器。因此,这将是

renderer1.render(scene1, camera1); 
renderer2.render(scene2, camera2); 

(周围的其他方法的工作原理,以及:您可以使用多个渲染器来渲染不同的摄像机同样的场景)

编辑基于评论

你可以还使用一个渲染器将多个场景渲染到同一个画布的不同区域。为此,您需要为每个场景设置不同的视口和剪刀测试(基于https://threejs.org/examples/#webgl_multiple_views

// first, render scene normally: 
camera.aspect = totalWidth/totalHeight; 
camera.updateProjectionMatrix(); 
renderer.setViewport(0, 0, totalWidth, totalHeight); 
renderer.setScissorTest(false); 
renderer.render(scene1, camera1); 

// then, render the overlay 
renderer.setViewport(left, bottom, width, height); 
renderer.setScissor(left, bottom, width, height); 
renderer.setScissorTest(true); 
renderer.setClearColor(view.background); 

camera.aspect = width/height; 
camera.updateProjectionMatrix(); 
renderer.render(scene2, camera2); 
+0

我尝试过使用多个渲染器,但在用户与应用程序交互期间创建并销毁了大量画布。这导致了某种渲染器限制。经过一些迭代后,它会停止为新的画布创建渲染器。然后我想到了这个渲染器的方法,但我不知道它是否可行,我不知道如何使它工作。 –

+1

@PogromcaMotyli如果您正在生成和销毁用于用户交互的画布,则不能正确处理问题。 – Marcs

+0

在这种情况下,根据您的操作方式,您可能需要格外小心地处理渲染器的摧毁(特别是正确调用'renderer.dispose()')实例。 –