Three.jsがレンダリングしているCanvasは、デフォルトでpreserveDrawingBufferがfalseになっているため、普通にdrawImageで他のCanvasにレンダリングしようとしたり、toDataURLを使ってbase64化したりしようと真っ黒になります。
const renderer = new THREE.WebGLRenderer({ preserveDrawingBuffer: true });
という感じで、rendererをつくるときに、preserveDrawingBufferをtrueにすれば、
renderer.domElement.toDataURL('image/png');
と、toDataURLでbase64化できますし、
const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); ctx.drawImage(renderer.domElement, 0, 0);
という感じで、他のCanvasにdrawImageすることも可能になります。