Interactive_Computer_Graphi.../Uebung_21122023/Quad/common/readMesh.js
2023-12-19 21:04:36 +01:00

70 lines
2.9 KiB
JavaScript

async function readMeshAsync(filename, callback) {
let filenames = [filename];
let result = await new Promise((resolve) => {
assimpjs().then(
function(ajs) {
Promise.all (filenames.map ((file) => fetch (file))).then ((responses) => {
return Promise.all (responses.map ((res) => res.arrayBuffer ()));
}).then ((arrayBuffers) => {
// create new file list object, and add the filename
let fileList = new ajs.FileList ();
fileList.AddFile (filename, new Uint8Array (arrayBuffers[0]));
let result = ajs.ConvertFileList (fileList, 'assjson');
if (!result.IsSuccess () || result.FileCount () == 0) {
console.log("Could not load mesh: " + filename);
return null;
}
// get the result file, and convert to string
let resultFile = result.GetFile (0);
let jsonContent = new TextDecoder ().decode (resultFile.GetContent ());
let resultJson = JSON.parse (jsonContent);
// parse the result json
resolve(callback(resultJson));
})
}
);
});
return result;
}
function readMesh(filename, callback) {
assimpjs().then(
function(ajs) {
Promise.all (filename.map ((file) => fetch (file))).then ((responses) => {
return Promise.all (responses.map ((res) => res.arrayBuffer ()));
}).then ((arrayBuffers) => {
// create new file list object, and add the filename
let mesh_buffers = []
for (let k = 0; k < filename.length; ++k) {
let fileList = new ajs.FileList ();
console.log(filename[k])
fileList.AddFile (filename[k], new Uint8Array (arrayBuffers[k]));
let result = ajs.ConvertFileList (fileList, 'assjson');
if (!result.IsSuccess () || result.FileCount () == 0) {
console.log("Could not load mesh: " + filename[k])
continue;
}
mesh_buffers.push(result);
}
// get the result file, and convert to string
let output = []
for (let i = 0; i < mesh_buffers.length; ++i) {
let resultFile = mesh_buffers[i].GetFile (0);
let jsonContent = new TextDecoder ().decode (resultFile.GetContent ());
let resultJson = JSON.parse (jsonContent);
output.push(resultJson);
}
// parse the result json
callback(output);
})
}
);
}