// // // // форматИзображенияДляБазы64 = (файл) => { var форматы = { ".png": "png", ".jpg": "jpeg", ".jpeg": "jpeg", ".gif": "gif", }; for (var окончание in форматы) { if (файл.toLowerCase().endsWith(окончание)) { return форматы[окончание]; } } return null; }; // // // // загрузитьТекстуру = (мир, указатель, файл, откликУспех, откликПровал = null) => { var модуль = мир.модули.модульПоУказателю(указатель); var содержимое = модуль.содержимое[файл]; var представление = мир.база64ИзДвоичногоМассива(new Uint8Array(содержимое)); var формат = форматИзображенияДляБазы64(файл); var адрес = `data:image/${формат};base64,${представление}`; мир.текстурщик.load( адрес, function(текстура) { текстура.flipY = false; откликУспех(текстура); }, null, function(error) { var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Не удалось загрузить текстуру ⚬ 无法加载纹理 ⚬ Could not load texture"; console.error(ошибка, указатель, файл); if (откликПровал) { откликПровал(); } } ); }; // // // // загрузитьПолигональнуюСетку = (мир, указатель, файл, откликУспех, откликПровал = null) => { var м = мир.модули.модульПоУказателю(указатель); var адрес = `${window.location.origin}${файл}`; THREE.Cache.enabled = true; THREE.Cache.add(адрес, м.содержимое[файл]); мир.модельер.load( адрес, function(gltf) { THREE.Cache.remove(адрес); // Вычленяем полигональную сетку. // Take polygon mesh. var успех = false; gltf.scene.traverse(function(ребёнок) { if (!успех && ребёнок.isMesh) { откликУспех(ребёнок); успех = true; } }); if (успех) { return; } var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Отсутствует полигональная сетка ⚬ 不存在多边形网格 ⚬ Polygon mesh is absent"; console.error(ошибка, указатель, файл); if (откликПровал) { откликПровал(); } }, null, function(error) { var ошибка = "ОШИБКА ⚬ 错误 ⚬ ERROR: Не удалось загрузить полигональную сетку ⚬ 无法加载多边形网格 ⚬ Could not load polygon mesh"; console.error(ошибка, указатель, файл); if (откликПровал) { откликПровал(); } } ); };