2016-11-05 79 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()')實例。 –