import fs from "fs"; export const BACKUP_SUFFIX = "_备份"; // 检查当前目录是否有 gltf 文件 export function hasGltfFile() { return listGltfFiles().length > 0; } // 获取当前目录下可用的 gltf 文件列表 export function listGltfFiles() { const cwd = process.cwd(); return fs.readdirSync(cwd).filter(f => f.toLowerCase().endsWith(".gltf") && !f.includes(BACKUP_SUFFIX)); } // 获取 glTF / GLB 模型文件 export function listModelFiles() { const cwd = process.cwd(); return fs .readdirSync(cwd) .filter(file => /\.(gltf|glb)$/i.test(file) && !file.includes(BACKUP_SUFFIX)); } // 获取所有支持的模型文件(包括需要转换的格式) export function listAllModelFiles() { const cwd = process.cwd(); return fs .readdirSync(cwd) .filter(file => /\.(gltf|glb|obj|fbx)$/i.test(file) && !file.includes(BACKUP_SUFFIX)); } // 判断是否需要先转换 export function needsConversion(file) { return /\.(obj|fbx)$/i.test(file); } // 检查是否满足执行条件(有 ktx2、gltf、bin 文件) export function checkRequiredFiles() { const cwd = process.cwd(); const files = fs.readdirSync(cwd); const hasKtx2 = files.some(f => f.toLowerCase().endsWith(".ktx2")); const hasGltf = files.some(f => f.toLowerCase().endsWith(".gltf")); const hasBin = files.some(f => f.toLowerCase().endsWith(".bin")); const missing = []; if (!hasKtx2) missing.push("ktx2"); if (!hasGltf) missing.push("gltf"); if (!hasBin) missing.push("bin"); return { ok: missing.length === 0, missing }; } // 修改 gltf 文件,根据选项添加扩展 export function modifyGltfContent(gltfPath, options = ["textureBasisu"]) { const content = fs.readFileSync(gltfPath, "utf-8"); const gltf = JSON.parse(content); if (options.includes("textureBasisu")) { if (!gltf.extensionsUsed) gltf.extensionsUsed = []; if (!gltf.extensionsUsed.includes("KHR_texture_basisu")) { gltf.extensionsUsed.push("KHR_texture_basisu"); } if (gltf.textures) { gltf.textures = gltf.textures.map(tex => ({ extensions: { KHR_texture_basisu: { source: tex.source } } })); } if (gltf.images) { gltf.images = gltf.images.map(img => { const uri = img.uri || ""; const newUri = uri.replace(/\.(png|jpg|jpeg|webp|tga)$/i, ".ktx2"); return { uri: newUri, mimeType: "image/ktx2" }; }); } } // placeholder1, placeholder2, placeholder3 预留扩展点 return gltf; }