[Bug Report] Model.js(about compressedImage3DTiles)

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.

Good find! You fix worked perfectly, I opened a PR here: https://github.com/AnalyticalGraphicsInc/cesium/pull/5596.

Thanks again, this was merged and will be in Cesium 1.36 on August 1.

Patrick

You’re welcome. I really like reading your works and learn a lot almost every day. Thank you ^^