我正在探索 webGL 框架。我喜欢 SceneJS,但似乎与 IE 存在一些兼容性问题。例如,在 IE 11 中,导入 OBJ 文件在在线示例中冻结:
有任何想法吗?或者这是一个很好的证据,表明 SceneJS 虽然很有趣,但作为一个项目已被充分放弃,我应该转向另一个 webGL 框架?
我正在探索 webGL 框架。我喜欢 SceneJS,但似乎与 IE 存在一些兼容性问题。例如,在 IE 11 中,导入 OBJ 文件在在线示例中冻结:
有任何想法吗?或者这是一个很好的证据,表明 SceneJS 虽然很有趣,但作为一个项目已被充分放弃,我应该转向另一个 webGL 框架?
似乎是 IE 的问题(在我的情况下是 IE 11),它不在 webGL 中,而是如何在 SceneJS 中加载 OBJ 文件。SceneJS 使用了一种似乎与 IE 不兼容的方法。
在 obj.js 中, load() 函数调用xhr.responseType = "arraybuffer";
这会在 IE 中引发状态错误,从而阻止 obj 加载。
一个简单的解决方案是在 obj.js 中编辑 load 函数(在第 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。似乎适用于我可以访问的所有浏览器。