工作需要(将模型为obj多文件批量转为gltf文件)
原模型文件夹目录结构
|-- objFiles
|-- 1#
| |-- 1F.mtl
| |-- 1F.obj
|-- 2#
| |-- 1F.mtl
| |-- 1F.obj
|-- 3#
| |-- 1F.mtl
| |-- 1F.obj
前提
将脚本文件和模型文件夹放在一同文件夹下
在同一文件夹下建立gltfFiles文件夹
|-- name
|-- changeToGltf.js
|-- gltfFiles
|-- objFiles
npm i obj2gltf
注意点:
- 多层文件夹可以先在对应文件夹gltfFiles内建立对应楼层的文件夹(或者用mkdir()方法在遍历到文件夹时建立对应的文件夹目录
- 代码引用: 递归实现遍历文件夹中所有文件 代码引用
具体脚本代码
//导入
const obj2gltf = require("obj2gltf");
const fs = require("fs");
//获取当前目录路径
var path = require("path");
// 将obj转gltf 方法
function covert(path) {
obj2gltf(path).then(function (gltf) {
//console.log(path);
//获取对应objFiles相同文件名
let arr = path.split("\\"); // 输出 ['objFiles', '1#', '1F.obj']
const data = Buffer.from(JSON.stringify(gltf));
//因为是多层文件夹 取对应文件夹和文件名
let name = `./gltfFiles/${arr[1]}/${arr[2].split('.')[0]}.gltf`;
fs.writeFileSync(name, data);
});
}
fileDisplay("./objFiles");
/**
* 文件遍历方法
* @param filePath 需要遍历的文件路径
*/
function fileDisplay(filePath) {
//根据文件路径读取文件,返回文件列表
fs.readdir(filePath, function (err, files) {
if (err) {
console.warn(err);
} else {
//遍历读取到的文件列表
files.forEach(function (filename) {
//获取当前文件的绝对路径
var filedir = path.join(filePath, filename);
//根据文件路径获取文件信息,返回一个fs.Stats对象
fs.stat(filedir, function (eror, stats) {
if (eror) {
console.warn("获取文件stats失败");
} else {
var isFile = stats.isFile(); //是文件
var isDir = stats.isDirectory(); //是文件夹
if (isFile) {
let arr = filedir.split(".");
// 因为文件里包含了obj和mtl两种文件 所以进行判断
if (arr[1] === "obj") {
//调用方法
covert(filedir);
}
}
if (isDir) {
fileDisplay(filedir); //递归,如果是文件夹,就继续遍历该文件夹下面的文件
}
}
});
});
}
});
}