Yes, the topic is complex but seems that this is pretty popular topic. I found solution for work with GLB on node.js without textures. It works pretty well. I need only process of the 3d objects without rendering.
I think that the only thing that should be solved is the Texture loading. I guess that if redefine the load textures function to the node.js function which will read data and convert it to base64 - it will work like a charm.
const toArrayBuffer = (buf) => {
const arrayBuffer = new ArrayBuffer(buf.length);
const view = new Uint8Array(arrayBuffer);
for (let i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return arrayBuffer;
}
const loadGLTFModel = (fileName) => {
const loader = new THREE.GLTFLoader();
return new Promise((resolve, reject) => {
if (fs.existsSync(fileName)) {
const data = fs.readFileSync(fileName);
const arrayBuffer = toArrayBuffer(data);
loader.parse(arrayBuffer, '',
(object3D) => {
resolve(object3D);
},
(error) => {
console.log(error);
reject('Loader failed')
});
} else reject(`Cannot find ${fileName}`);
});
}