Hi, I want to capture a camera view to create a dynamic texture on a 3D model but I can’t… If someone can help me. Thanks
const layerName = eventsFunctionContext.getArgument("layer");
const objects = eventsFunctionContext.getObjects("model3D")[0].get3DRendererObject();
const runtimeScene = eventsFunctionContext.getRuntimeScene();
const layer = runtimeScene.getLayer(layerName);
if (!layer) {
console.error(`Le calque "${layerName}" n'existe pas.`);
return;
}
const cameraHeight = layer.getCameraHeight();
const cameraWidth = layer.getCameraWidth();
const threeScene = layer.getRenderer().getThreeScene();
const threeRenderer = runtimeScene.getGame().getRenderer().getThreeRenderer();
const threeCamera = layer.getRenderer().getThreeCamera();
const renderTarget = new THREE.WebGLRenderTarget(cameraWidth, cameraHeight, {
format: THREE.RGBAFormat,
minFilter: THREE.LinearFilter,
magFilter: THREE.LinearFilter,
generateMipmaps: false,
});
function updateRenderTarget() {
threeRenderer.setRenderTarget(renderTarget);
threeRenderer.clear();
threeRenderer.render(threeScene, threeCamera);
threeRenderer.setRenderTarget(null);
}
for (let i in objects) {
const threeObject = objects[i].get3DRendererObject();
if (!threeObject) {
console.error(`L'objet 3D "${objects[i].getName()}" n'est pas valide.`);
continue;
}
updateRenderTarget();
const texture = renderTarget.texture;
if (threeObject.isMesh && threeObject.material) {
threeObject.material.map = texture;
threeObject.material.transparent = false;
threeObject.material.needsUpdate = true;
}
threeObject.traverse((node) => {
if (node.isMesh && node.material) {
node.material.map = texture;
node.material.transparent = false;
node.material.needsUpdate = true;
}
});
}