obj2gltf/lib/convert.js

61 lines
1.9 KiB
JavaScript

"use strict";
var path = require('path');
var GltfPipeline = require('gltf-pipeline').Pipeline;
var parseObj = require('./obj');
var createGltf = require('./gltf');
var Cesium = require('cesium');
var defined = Cesium.defined;
var defaultValue = Cesium.defaultValue;
module.exports = convert;
function convert(objFile, outputPath, options) {
options = defaultValue(options, {});
var binary = defaultValue(options.binary, false);
var embed = defaultValue(options.embed, true);
var embedImage = defaultValue(options.embedImage, true);
var compress = defaultValue(options.compress, false);
var ao = defaultValue(options.ao, false);
var optimizeForCesium = defaultValue(options.optimizeForCesium, false);
if (!defined(objFile)) {
throw new Error('objFile is required');
}
if (!defined(outputPath)) {
outputPath = path.dirname(objFile);
}
var inputPath = path.dirname(objFile);
var modelName = path.basename(objFile, '.obj');
var extension = path.extname(outputPath);
if (extension !== '') {
modelName = path.basename(outputPath, extension);
outputPath = path.dirname(outputPath);
}
extension = binary ? '.glb' : '.gltf';
var gltfFile = path.join(outputPath, modelName + extension);
return parseObj(objFile, inputPath)
.then(function(data) {
return createGltf(data, inputPath, modelName);
})
.then(function(gltf) {
var aoOptions = ao ? {} : undefined;
var options = {
binary: binary,
embed: embed,
embedImage: embedImage,
encodeNormals: compress,
quantize: compress,
aoOptions: aoOptions,
optimizeForCesium : optimizeForCesium,
createDirectory: false,
basePath: inputPath
};
return GltfPipeline.processJSONToDisk(gltf, gltfFile, options);
});
}