我正在探索webGL框架。我喜欢SceneJS,但是IE似乎存在一些兼容性问题。例如,在IE 11中,导入OBJ文件会冻结在在线示例中:
这是链接
有什么想法吗?或者这是一个很好的证据,说明SceneJS虽然有趣,但已经作为一个项目被完全放弃了,我应该转到另一个webGL框架中去?
发布于 2016-08-20 05:57:36
这似乎是IE的问题(在我的例子中是IE11),它不是在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函数显式地将下载的文本字符串转换为数组缓冲区。似乎可以在我可以访问的所有浏览器上工作。
https://stackoverflow.com/questions/39048488
复制相似问题