欢迎光临散文网 会员登陆 & 注册

使用assimpjs转换三维模型

2023-02-19 12:17 作者:地理信息技术杂谈  | 我要投稿

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



使用assimpjs转换三维模型的评论 (共 条)

分享到微博请遵守国家法律