Как экспортировать изображение из сцены из ThreeJS

#javascript #html #three.js #3d #export

#javascript #HTML #three.js #3D #экспорт

Вопрос:

Я хотел бы экспортировать 2d-изображение моей сцены, нажав кнопку на моей html-странице. Какую строку кода я должен добавить в свою функцию? кажется, это не работает и не загружает изображение. (Я использую Chrome в качестве браузера)

 const exportLink = document.getElementById( 'exportLink' );
exportLink.addEventListener( 'click', () => {

    rendererExport.render( scene, camera );
    const dataURL = rendererExport.domElement.toDataURL( 'image/png' );

    exportLink.href = dataURL;
    exportLink.download = 'export.png';

} );
}
 

вот моя функция рендеринга

 function render() {

renderer.render(scene, camera);
  document.getElementById("colore").onclick= function(){
    somma=  slider.value    slider1.value    slider2.value    slider3.value    slider4.value;
    console.log(somma);

    if(somma<=70){
      customMaterial1.uniforms.glowColor.value.set( 0x668072 );
      customMaterial2.uniforms.glowColor.value.set( 0x4f6749 );
      customMaterial3.uniforms.glowColor.value.set( 0x491520 );
      customMaterial4.uniforms.glowColor.value.set( 0xb3c753 );
      customMaterial5.uniforms.glowColor.value.set( 0xe61f59 );
    }
}
 

Ответ №1:

Ваша кнопка настроена на выполнение функции JavaScript, которой вы поделились. Однако для запуска загрузки необходимо выполнить действие навигации. Обычный способ сделать это — использовать временный якорь ( <a> ).

 const exportLink = document.getElementById( 'exportLink' );
exportLink.addEventListener( 'click', () => {

    rendererExport.render( scene, camera );
    const dataURL = rendererExport.domElement.toDataURL( 'image/png' );

    let a = document.createElement( 'a' ); // Create a temporary anchor.
    a.href = dataURL;
    a.download = 'export.png';
    a.click(); // Perform the navigation action to trigger the download.

} );
 

Комментарии:

1. Спасибо вам за ваш ответ. Он по-прежнему не запускает загрузку моментального снимка tho. Мой элемент с идентификатором «exportLink» — это <p> . может ли это быть причиной того, что он не работает?

2. @LabSintesi exportLink может быть чем угодно. Вы назначили его для реагирования на click события с помощью вашей функции, но не более того. В моем коде я создаю новый элемент, который приравнивается к: <a href="--the dataURL--" download="export.png"></a> , на который затем нажимается щелчок. Если это не запускает загрузку, проверьте консоль ( F12 ) на наличие ошибок или проверьте, не блокирует ли загрузка ваш браузер.