我試圖在兩個不同的畫布上創建兩個場景。 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)
將它這樣做呢?
我試圖在兩個不同的畫布上創建兩個場景。 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)
將它這樣做呢?
是的 - 這是完全可能的,但渲染器實例始終綁定到畫布的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);
我嘗試過使用多個渲染器,但在用戶與應用程序交互期間創建並銷燬了大量畫布。這導致了某種渲染器限制。經過一些迭代後,它會停止爲新的畫布創建渲染器。然後我想到了這個渲染器的方法,但我不知道它是否可行,我不知道如何使它工作。 –
@PogromcaMotyli如果您正在生成和銷燬用於用戶交互的畫布,則不能正確處理問題。 – Marcs
在這種情況下,根據您的操作方式,您可能需要格外小心地處理渲染器的摧毀(特別是正確調用'renderer.dispose()')實例。 –
您是否嘗試過? –
不,但我在想。 –