|
- рисовательПоддерживаетИзображениеСИменемФайла = (файл) =>
- {
- var форматы = поддерживаемыеРисователемФорматыИзображений();
- for (var окончание in форматы)
- {
- if (файл.endsWith(окончание))
- {
- return true;
- }
- }
- return false;
- };
-
-
- // // // //
-
-
- поддерживаемыеРисователемФорматыИзображений = () =>
- {
- return {
- ".png": "png",
- ".jpg": "jpeg",
- ".jpeg": "jpeg",
- ".gif": "gif",
- };
- };
-
-
- // // // //
-
-
- загрузитьРесурсыПоследовательно = (мир, функция, словарь, событие) =>
- {
- var список = словарьРесурсовВСписок(словарь);
-
- function загрузить(мир, список, номер, успех, провал)
- {
- const э = список[номер];
- функция(
- мир,
- э.указатель,
- э.файл,
- function(ресурс) {
- словарь[э.указатель][э.файл] = ресурс;
- успех();
- },
- function() {
- успех();
- }
- );
- }
-
- сделатьПоследовательно(
- мир,
- список,
- загрузить,
- function() {
- мир.уведомить(событие);
- }
- );
- };
-
-
- // // // //
-
-
- словарьРесурсовВСписок = словарь =>
- {
- var список = [];
- for (var указатель in словарь)
- {
- for (var файл in словарь[указатель])
- {
- список.push({
- "указатель": указатель,
- "файл": файл,
- });
- }
- }
- return список;
- };
-
-
- // // // //
-
-
- форматИзображенияДляБазы64 = файл =>
- {
- var форматы = поддерживаемыеРисователемФорматыИзображений();
- 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 (откликПровал)
- {
- откликПровал();
- }
- }
- );
- };
|