reactjs - چگونه بدون استفاده از چندین کانتکست threejs چندین صحنه را رندر کنیم
من این آموزش را دیدهام که چگونه فقط از یک context و renderer سهجیاس برای نمایش اشیاء در چندین بوم استفاده کنیم، آیا راهی برای منتقل کردن نتیجه به react-three-fiber وجود دارد؟ یک نمونه از چند صحنه در گیتهاب وجود دارد اما این چیزی نیست که من میخواهم.
من چیزی شبیه به این به ذهنم رسید:
import React, { useMemo, useEffect, useRef } from 'react';
import * as THREE from 'three';
function useRenderer() {
const renderer = useMemo(() => {
const canvas = document.createElement('canvas');
return new THREE.WebGLRenderer({canvas, alpha: true})
}, []);
return renderer;
}
function Scene({ renderer }: any) {
const ref = useRef<HTMLCanvasElement>(null);
useEffect(() => {
if (ref.current) {
const {left, right, top, bottom, width, height} = ref.current.getBoundingClientRect();
const isOffscreen = bottom < 0 || top > window.innerHeight || right < 0 || left > window.innerWidth;
const ctx = ref.current.getContext('2d');
if (ctx && !isOffscreen) {
const rendererCanvas = renderer.domElement;
if (rendererCanvas.width < width || rendererCanvas.height < height) {
renderer.setSize(width, height, false);
}
// make sure the canvas for this area is the same size as the area
if (ctx.canvas.width !== width || ctx.canvas.height !== height) {
ctx.canvas.width = width;
ctx.canvas.height = height;
}
renderer.setScissor(0, 0, width, height);
renderer.setViewport(0, 0, width, height);
// copy the rendered scene to this element's canvas
ctx.globalCompositeOperation = 'copy';
ctx.drawImage(
rendererCanvas,
0, rendererCanvas.height - height, width, height, // src rect
0, 0, width, height); // dst rect
}
}
}, [ref, renderer])
return <canvas ref={ref} />;
}
function App() {
const renderer = useRenderer();
return (
<div>
<Scene renderer={renderer} />
</div>
);
}
export default App;
اما احساس میکنم دارم از React و react-three-fiber فاصله میگیرم و نمیدانم چگونه فرزندان صحنهام را رندر کنم.
راهی هست که بدون اینکه زیاد کثیف شود بتوانم این را انجام دهم؟