mirror of https://github.com/CesiumGS/obj2gltf.git
Updates
This commit is contained in:
parent
a55ea69661
commit
eaca567a25
|
@ -199,7 +199,7 @@ function getTexture(gltf, texture) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function cloneMaterial(material, removeTextures) {
|
function cloneMaterial(material, removeTextures) {
|
||||||
if (material === null || typeof material !== 'object') {
|
if (typeof material !== 'object') {
|
||||||
return material;
|
return material;
|
||||||
} else if (material instanceof Texture) {
|
} else if (material instanceof Texture) {
|
||||||
if (removeTextures) {
|
if (removeTextures) {
|
||||||
|
@ -236,7 +236,7 @@ function resolveTextures(gltf, material) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function addMaterial(gltf, material) {
|
function addGltfMaterial(gltf, material) {
|
||||||
resolveTextures(gltf, material);
|
resolveTextures(gltf, material);
|
||||||
var materialIndex = gltf.materials.length;
|
var materialIndex = gltf.materials.length;
|
||||||
gltf.materials.push(material);
|
gltf.materials.push(material);
|
||||||
|
@ -261,12 +261,12 @@ function getMaterialIndex(materials, materialName) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMaterial(gltf, materials, materialName) {
|
function getOrCreateGltfMaterial(gltf, materials, materialName) {
|
||||||
var material = getMaterialByName(materials, materialName);
|
var material = getMaterialByName(materials, materialName);
|
||||||
var materialIndex = getMaterialIndex(gltf.materials, materialName);
|
var materialIndex = getMaterialIndex(gltf.materials, materialName);
|
||||||
|
|
||||||
if (!defined(materialIndex)) {
|
if (!defined(materialIndex)) {
|
||||||
materialIndex = addMaterial(gltf, material);
|
materialIndex = addGltfMaterial(gltf, material);
|
||||||
}
|
}
|
||||||
|
|
||||||
return materialIndex;
|
return materialIndex;
|
||||||
|
@ -277,6 +277,18 @@ function primitiveInfoMatch(a, b) {
|
||||||
a.hasNormals === b.hasNormals;
|
a.hasNormals === b.hasNormals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSplitMaterialName(originalMaterialName, primitiveInfo, primitiveInfoByMaterial) {
|
||||||
|
var splitMaterialName = originalMaterialName;
|
||||||
|
var suffix = 2;
|
||||||
|
while (defined(primitiveInfoByMaterial[splitMaterialName])) {
|
||||||
|
if (primitiveInfoMatch(primitiveInfo, primitiveInfoByMaterial[splitMaterialName])) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
splitMaterialName = originalMaterialName + '-' + suffix++;
|
||||||
|
}
|
||||||
|
return splitMaterialName;
|
||||||
|
}
|
||||||
|
|
||||||
function splitIncompatibleMaterials(nodes, materials, options) {
|
function splitIncompatibleMaterials(nodes, materials, options) {
|
||||||
var splitMaterials = [];
|
var splitMaterials = [];
|
||||||
var primitiveInfoByMaterial = {};
|
var primitiveInfoByMaterial = {};
|
||||||
|
@ -296,31 +308,23 @@ function splitIncompatibleMaterials(nodes, materials, options) {
|
||||||
hasNormals : hasNormals
|
hasNormals : hasNormals
|
||||||
};
|
};
|
||||||
var originalMaterialName = defaultValue(primitive.material, 'default');
|
var originalMaterialName = defaultValue(primitive.material, 'default');
|
||||||
var materialName = originalMaterialName;
|
var splitMaterialName = getSplitMaterialName(originalMaterialName, primitiveInfo, primitiveInfoByMaterial);
|
||||||
var suffix = 2;
|
primitive.material = splitMaterialName;
|
||||||
while (defined(primitiveInfoByMaterial[materialName])) {
|
primitiveInfoByMaterial[splitMaterialName] = primitiveInfo;
|
||||||
if (primitiveInfoMatch(primitiveInfo, primitiveInfoByMaterial[materialName])) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
materialName = originalMaterialName + '-' + suffix++;
|
|
||||||
}
|
|
||||||
|
|
||||||
primitive.material = materialName;
|
var splitMaterial = getMaterialByName(splitMaterials, splitMaterialName);
|
||||||
primitiveInfoByMaterial[materialName] = primitiveInfo;
|
if (defined(splitMaterial)) {
|
||||||
|
|
||||||
var material = getMaterialByName(splitMaterials, materialName);
|
|
||||||
if (defined(material)) {
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
material = getMaterialByName(materials, originalMaterialName);
|
var originalMaterial = getMaterialByName(materials, originalMaterialName);
|
||||||
if (defined(material)) {
|
if (defined(originalMaterial)) {
|
||||||
material = cloneMaterial(material, !hasUvs);
|
splitMaterial = cloneMaterial(originalMaterial, !hasUvs);
|
||||||
} else {
|
} else {
|
||||||
material = getDefaultMaterial(options);
|
splitMaterial = getDefaultMaterial(options);
|
||||||
}
|
}
|
||||||
material.name = materialName;
|
splitMaterial.name = splitMaterialName;
|
||||||
splitMaterials.push(material);
|
splitMaterials.push(splitMaterial);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -422,7 +426,7 @@ function addPrimitive(gltf, materials, bufferState, uint32Indices, mesh, primiti
|
||||||
primitive.uvs = undefined;
|
primitive.uvs = undefined;
|
||||||
primitive.indices = undefined;
|
primitive.indices = undefined;
|
||||||
|
|
||||||
var materialIndex = getMaterial(gltf, materials, primitive.material);
|
var materialIndex = getOrCreateGltfMaterial(gltf, materials, primitive.material);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
attributes : attributes,
|
attributes : attributes,
|
||||||
|
|
Loading…
Reference in New Issue