Right, makes sense - when I modify EllipsoidTerrainProvider to use WebMercatorTilingScheme instead of Geographic that does make SHOW_TILE_BOUNDARIES line up with the tiles, but I’m still getting the same imagery distortion issues, and as a result (I think) the highlight doesn’t line up with the imagery.
I went back to the original library source code and stripped my test code down to its basic elements (unfortunately I can’t share my imagery publicly but the TileCoordinatesImageryProvider exhibits similar issues): https://www.dropbox.com/s/76jug9y474vju84/grid-distortion.mov
require.config({
baseUrl: ‘js/Cesium-full-b22/Source’
});
require([‘Cesium’], function(Cesium) {
“use strict”;
var maximumLevel = 10;
var canvas = document.createElement(‘canvas’);
canvas.className = “fullSize”;
document.getElementById(‘cesiumContainer’).appendChild(canvas);
var ellipsoid = Cesium.Ellipsoid.WGS84;
window.scene = new Cesium.Scene(canvas);
var primitives = scene.getPrimitives();
var centralBody = new Cesium.CentralBody(ellipsoid);
var imageryProvider = new Cesium.TileCoordinatesImageryProvider({ tilingScheme: new Cesium.WebMercatorTilingScheme() });
centralBody.getImageryLayers().addImageryProvider(imageryProvider);
primitives.setCentralBody(centralBody);
var polygon = new Cesium.ExtentPrimitive({
extent : new Cesium.Extent( // will crash unless extent has an initial size
Cesium.Math.toRadians(-11.0),
Cesium.Math.toRadians(0.0),
Cesium.Math.toRadians(-9.0),
Cesium.Math.toRadians(2.0)),
material : Cesium.Material.fromType(Cesium.Material.ColorType)
});
scene.getPrimitives().add(polygon);
polygon.material.uniforms.color = new Cesium.Color(0.0, 0.0, 0.0, 0.0);
function tick() {
scene.initializeFrame();
scene.render();
Cesium.requestAnimationFrame(tick);
}
tick();
var onResize = function () {
var width = canvas.clientWidth;
var height = canvas.clientHeight;
if (canvas.width === width && canvas.height === height) {
return;
}
canvas.width = width;
canvas.height = height;
scene.getCamera().frustum.aspectRatio = width / height;
};
window.addEventListener(‘resize’, onResize, false);
onResize();
var handler = new Cesium.ScreenSpaceEventHandler(scene.getCanvas());
var curpos = { x: -1, y: -1 };
handler.setInputAction(function(click) {
var cartesian = scene.getCamera().controller.pickEllipsoid(click.endPosition, ellipsoid);
if (cartesian) {
var cartographic = ellipsoid.cartesianToCartographic(cartesian);
var tilingScheme = imageryProvider.getTilingScheme();
var tpos = tilingScheme.positionToTileXY(cartographic, maximumLevel);
if (tpos && (tpos.x != curpos.x || tpos.y != curpos.y)) {
polygon.material.uniforms.color.alpha = 0.3;
polygon.extent = tilingScheme.tileXYToExtent(tpos.x, tpos.y, maximumLevel);
}
}
}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
});