使用assimpjs轉(zhuǎn)換三維模型
assimpjs是開源類庫(kù)assimp的emscripten接口,能夠?qū)崿F(xiàn)讀取40+以上類型的三維模型格式,導(dǎo)出成json或者gltf格式的三維模型。
能夠?qū)崿F(xiàn)在瀏覽器中開發(fā)實(shí)現(xiàn),也能夠以nodejs的模式進(jìn)行開發(fā),數(shù)據(jù)處理時(shí),使用nodejs能夠很方便實(shí)現(xiàn)。
下邊以代碼的形式,簡(jiǎn)單說(shuō)一下如何進(jìn)行模型轉(zhuǎn)換,其中的注意事項(xiàng)。
簡(jiǎn)單的模型轉(zhuǎn)換
使用npm安裝依賴包:npm install assimpjs
? ? ??//nodejs初始化
? ? ? const assimpjs = require ('assimpjs')();
? ? ? let fs = require ('fs');?
assimpjs.then ((ajs) => {
? ? //?創(chuàng)建模型轉(zhuǎn)換列表
? ? let fileList = new ajs.FileList ();?
? ? // 添加模型文件,以obj為例,同時(shí)需要添加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')
? ? );
? ? // 將模型轉(zhuǎn)成assimp json格式
? ? let result = ajs.ConvertFileList (fileList, 'assjson');
? ? // 檢查轉(zhuǎn)換是否成功
? ? if (!result.IsSuccess () || result.FileCount () == 0) {
? ? ? ? console.log (result.GetErrorCode ());
? ? ? ? return;
? ? }
? ? // 獲得文件的轉(zhuǎn)換結(jié)構(gòu),轉(zhuǎn)換成字符串
? ? let resultFile = result.GetFile (0);
? ? let jsonContent = new TextDecoder ().decode (resultFile.GetContent ());
? ? // 轉(zhuǎn)換成json格式
? ? let resultJson = JSON.parse (jsonContent);
});
轉(zhuǎn)換成gltf文件
和轉(zhuǎn)換成assimp json格式有些區(qū)別,
? ?//gltf參數(shù)為gltf2表示為版本2格式
? ??let?result?=?ajs.ConvertFileList?(fileList,?'gltf2');
? ?? ....
? ??// gltf的結(jié)構(gòu)文件,索引是0
? ??let?resultFile?=?result.GetFile?(0);??
? ??let?jsonContent?=?new?TextDecoder?().decode?(resultFile.GetContent?());
???//gltf的資源文件需要單獨(dú)進(jìn)行保存,索引為1
? ??let?binFile?=?result.GetFile?(1);
? ??fs.writeFileSync('result.bin',?binFile.GetContent?());
? ??// gltf對(duì)應(yīng)的文件也為json格式
? ??let?resultJson?=?JSON.parse?(jsonContent);?
引用內(nèi)容:
? ? ?https://github.com/kovacsv/assimpjs
? ? ?https://github.com/assimp/assimp