Импорт моделей 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. Кажется, работает на всех браузерах, к которым у меня есть доступ.

Другие вопросы по тегам