Импорт моделей SceneJS с IE не работает
Я изучаю основы webGL. Мне нравится SceneJS, но, похоже, есть некоторые проблемы с совместимостью с IE. Например, в IE 11 импорт файлов OBJ зависает в онлайн-примерах:
Есть идеи? Или это хорошее доказательство того, что SceneJS, хотя и интересный, достаточно заброшен как проект, и мне следует перейти к другой среде webGL?
1 ответ
Кажется, проблема для IE (в моем случае IE 11) не в webGL, а в том, как OBJ-файл загружается в SceneJS. SceneJS использовал метод, который, похоже, не совместим с IE.
В obj.js вызывается функция load() xhr.responseType = "arraybuffer";
Это вызывает ошибку состояния в IE, которая препятствует загрузке объекта.
Простое решение состоит в том, чтобы отредактировать функцию загрузки в obj.js (вокруг строки 75 без минимизации). Вот полная функция:
function load(url, ok, error) {
var xhr = new XMLHttpRequest();
//xhr.responseType = "arraybuffer"; // chagned
// xhr.addEventListener('progress',
// function (event) {
// // TODO: Update the task? { type:'progress', loaded:event.loaded, total:event.total }
// }, false);
xhr.addEventListener('load',
function(event) {
if (event.target.response) {
var s = event.target.response;
var uintArray = new Uint8Array(s.split('').map(function(char) {return char.charCodeAt(0);}));
ok(uintArray);
} else {
error('Invalid file [' + url + ']');
}
}, false);
xhr.addEventListener('error',
function() {
error('Couldn\'t load URL [' + url + ']');
}, false);
xhr.open('GET', url, true);
xhr.send(null);
}
})();
Комментируя xhr.responseType = "arraybuffer", он по умолчанию устанавливает тип ответа "text", а затем вам необходимо явно преобразовать загруженную текстовую строку в буфер массива с помощью функции Uint8Array. Кажется, работает на всех браузерах, к которым у меня есть доступ.