我想为我的 webgl 应用程序获取一些数据。我需要将这些数据与着色器一起使用,所以我必须将它们放入 ArrayBuffer 中。现在我这里有两个非常相似的代码片段。第一个应该使用二进制文件:
function readBinaryFile(file) {
var request = new XMLHttpRequest();
request.open('GET', file, true);
request.responseType = "arraybuffer";
request.onload = function (e) {
if (request.readyState === 4) {
if (request.status === 200) {
var buffer = request.response;
// here I already have a Buffer,
// so Im just constructing TypedArray
var result = new Float32Array(buffer, 64, 4*3*250 );
} else {
console.error(request.statusText);
}
}
};
request.send(null);
};
readBinaryFile('data/file.bin'));
第二个应该与 json 文件一起使用:
function readJSONFile(file) {
var request = new XMLHttpRequest();
request.open('GET', file, true);
request.responseType = "arraybuffer";
request.onload = function (e) {
if (request.readyState === 4) {
if (request.status === 200) {
var jsonData = JSON.parse(request.responseText);
// here I dont have a buffer, so
// it will create both Buffer and TypedArray
var result = new Float32Array(jsonData.vertexPositions);
} else {
console.error(request.statusText);
}
}
};
request.send(null);
};
readJSONFile('data/file.json'));
我喜欢 json 文件的结构,我看到很多人都在使用它。但我觉得它有点脏,因为我做了一些我不需要做的事情,比如解析大型 json 或请求 responseText 而不是二进制数据。我宁愿使用 json 方式,但我的应用程序应该真的很棒而且很快,所以也许不值得......
所以我的问题是,是否有人也考虑过它并用它做了一些测试。谢谢你。
PS:考虑一下已经在浏览器数据存储中的 100MB 数据,或者可能正在运行中加载一些数据......