javascript - SceneJS 导入模型不适用于 IE

标签 javascript import scenejs

我正在探索 webGL 框架。我喜欢SceneJS,但似乎与IE存在一些兼容性问题。例如,在 IE 11 中,导入 OBJ 文件会在在线示例中卡住:

Here is the link

有什么想法吗?或者这是一个很好的证据,表明 SceneJS 虽然很有趣,但作为一个项目已经被放弃了,我应该转向另一个 webGL 框架?

最佳答案

这似乎是 IE 的问题(在我的例子中是 IE 11),它不在 webGL 中,而是在 SceneJS 中如何加载 OBJ 文件。 SceneJS使用了一种似乎与IE不兼容的方法。

在 obj.js 中,load() 函数调用 xhr.responseType = "arraybuffer"; 这会在 IE 中引发状态错误,从而阻止 obj 加载。

一个简单的解决方案是编辑 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 函数将下载的文本字符串显式转换为 arraybuffer。似乎适用于我有权访问的所有浏览器。

关于javascript - SceneJS 导入模型不适用于 IE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39048488/

相关文章:

javascript - 为什么这个函数调用会破坏程序并导致 undefined variable ?

ruby-on-rails - 未定义方法 `path' 为 nil :NilClass when trying CSV import

ios - "Export and reimport"xcode 项目

javascript - 用于 Google 电子表格的 JavaScript 学生 t 分布

javascript - 在 Javascript 中迭代不同的 div 并将参数传递给脚本

javascript - 什么是控制台.log?

random - 名称 'randrange' 未定义错误,密码生成器

json - 将 3D 模型转换为 SceneJS JSON,包括纹理

opengl-es - 在 webgl 中缩放不可变对象(immutable对象)