assimpjs是开源类库assimp的emscripten接口,能够实现读取40+以上类型的三维模型格式,导出成json或者gltf格式的三维模型。
能够实现在浏览器中开发实现,也能够以nodejs的模式进行开发,数据处理时,使用nodejs能够很方便实现。
下边以代码的形式,简单说一下如何进行模型转换,其中的注意事项。
使用npm安装依赖包:
npm install assimpjs
//nodejs初始化
const assimpjs = require ('assimpjs')();
let fs = require ('fs');
assimpjs.then ((ajs) => {
// 创建模型转换列表
let fileList = new ajs.FileList ();
// 添加模型文件,以obj为例,同时需要添加mtl索引文件
fileList.AddFile (
'cube_with_materials.obj',
fs.readFileSync ('testfiles/cube_with_materials.obj')
);
fileList.AddFile (
'cube_with_materials.mtl',
fs.readFileSync ('testfiles/cube_with_materials.mtl')
);
// 将模型转成assimp json格式
let result = ajs.ConvertFileList (fileList, 'assjson');
// 检查转换是否成功
if (!result.IsSuccess () || result.FileCount () == 0) {
console.log (result.GetErrorCode ());
return;
}
// 获得文件的转换结构,转换成字符串
let resultFile = result.GetFile (0);
let jsonContent = new TextDecoder ().decode (resultFile.GetContent ());
// 转换成json格式
let resultJson = JSON.parse (jsonContent);
});
转换成gltf文件
和转换成assimp json格式有些区别,
//gltf参数为gltf2表示为版本2格式
let result = ajs.ConvertFileList (fileList, 'gltf2');
....
// gltf的结构文件,索引是0
let resultFile = result.GetFile (0);
let jsonContent = new TextDecoder ().decode (resultFile.GetContent ());
//gltf的资源文件需要单独进行保存,索引为1
let binFile = result.GetFile (1);
fs.writeFileSync('result.bin', binFile.GetContent ());
// gltf对应的文件也为json格式
let resultJson = JSON.parse (jsonContent);
引用内容:
https://github.com/kovacsv/assimpjs
https://github.com/assimp/assimp