I’m testing a gltf model contains crn compressed texture uri image
model location : (Specs/Data/Models/Box-Textured-CRN/CesiumTexturedBoxTest.gltf)
I couldn’t use uri crn image in this gltf.
And I think I’m found a small bug in Model.js.
source location(from 1547 line in Model.js):
var imagePath = joinUrls(model._baseUri, gltfImage.uri); //-> always use default image, have to use uri variable : var imagePath = joinUrls(model._baseUri, uri);
function parseTextures(model, context) {
var images = model.gltf.images;
var textures = model.gltf.textures;
var binary;
var uri;
for (var id in textures) {
if (textures.hasOwnProperty(id)) {
var gltfImage = images[textures[id].source];
var extras = gltfImage.extras;
binary = undefined;
uri = undefined;
// First check for a compressed texture
if (defined(extras) && defined(extras.compressedImage3DTiles)) {
var crunch = extras.compressedImage3DTiles.crunch;
var s3tc = extras.compressedImage3DTiles.s3tc;
var pvrtc = extras.compressedImage3DTiles.pvrtc1;
var etc1 = extras.compressedImage3DTiles.etc1;
if (context.s3tc && defined(crunch)) {
if (defined(crunch.extensions)&& defined(crunch.extensions.KHR_binary_glTF)) {
binary = crunch.extensions.KHR_binary_glTF;
} else {
uri = crunch.uri;
}
} else if (context.s3tc && defined(s3tc)) {
if (defined(s3tc.extensions)&& defined(s3tc.extensions.KHR_binary_glTF)) {
binary = s3tc.extensions.KHR_binary_glTF;
} else {
uri = s3tc.uri;
}
} else if (context.pvrtc && defined(pvrtc)) {
if (defined(pvrtc.extensions)&& defined(pvrtc.extensions.KHR_binary_glTF)) {
binary = pvrtc.extensions.KHR_binary_glTF;
} else {
uri = pvrtc.uri;
}
} else if (context.etc1 && defined(etc1)) {
if (defined(etc1.extensions)&& defined(etc1.extensions.KHR_binary_glTF)) {
binary = etc1.extensions.KHR_binary_glTF;
} else {
uri = etc1.uri;
}
}
}
// No compressed texture, so image references either uri (external or base64-encoded) or bufferView
if (!defined(binary) && !defined(uri)) {
if (defined(gltfImage.extensions) && defined(gltfImage.extensions.KHR_binary_glTF)) {
binary = gltfImage.extensions.KHR_binary_glTF;
} else {
uri = new Uri(gltfImage.uri);
}
}
// Image references either uri (external or base64-encoded) or bufferView
if (defined(binary)) {
model._loadResources.texturesToCreateFromBufferView.enqueue({
id : id,
image : undefined,
bufferView : binary.bufferView,
mimeType : binary.mimeType
});
} else {
++model._loadResources.pendingTextureLoads;
**var imagePath = joinUrls(model._baseUri, gltfImage.uri); //-> always use default image, have to use uri variable : var imagePath = joinUrls(model._baseUri, uri);**
var promise;
if (ktxRegex.test(imagePath)) {
promise = loadKTX(imagePath);
} else if (crnRegex.test(imagePath)) {
promise = loadCRN(imagePath);
} else {
promise = loadImage(imagePath);
}
promise.then(imageLoad(model, id)).otherwise(getFailedLoadFunction(model, ‘image’, imagePath));
}
}
}
}
``
please review it
Thanks cesium team
shyoo.