Cesio: uso de la cámara para escalar un polígono para que coincida con las posiciones de Lat-Lon al acercar / alejar

Estoy luchando con la funcionalidad de la cámara que (creo) proporcionaría una forma deobligar a mi polígono a pegarse en la parte superior de mi casa en alejar, acercar y girar (o mover la cámara).

Esta pregunta sigue a una anteriorpregunta Eso fue resuelto. Ahora necesito un poco de ayuda para resolver mi próximo problema.

El código de muestra que intento seguir se encuentra enel estándar de oro que parece estar integrado en el controlador de cámara existente aquí.

pickGlobe se ejecuta con los parámetros del visor, la posición correcta del mouse en las coordenadas mundiales y un parámetro de resultado, que no me importa en este momento.scene.pickPosition toma la posición c2 (Cartesiano2) y debería devolver scratchDepthIntersection (Cartesiano3) En cambio, el valor devuelto esindefinido.

Aquí está mi código:

function clickAction(click) {
    var cartesian = scene.camera.pickEllipsoid(click.position, ellipsoid);
    if (cartesian) {
        var setCartographic = ellipsoid.cartesianToCartographic(cartesian);
        collection.latlonalt.push(
            Cesium.Math.toDegrees(setCartographic.latitude).toFixed(15),
            Cesium.Math.toDegrees(setCartographic.longitude).toFixed(15),
            Cesium.Math.toDegrees(setCartographic.height).toFixed(15)
        );
        lla.push(Cesium.Math.toDegrees(setCartographic.longitude), Cesium.Math.toDegrees(setCartographic.latitude));
        if (lla.length >= 4) {
            console.log((lla.length / 2) + ' Points Added');
        }
        enableDoubleClick();
        enableDraw();

        testMe(click.position);  <--------------------- straight from the mouse click
    }
}

var pickedPosition;
var scratchZoomPickRay = new Cesium.Ray();
var scratchPickCartesian = new Cesium.Cartesian3();
function testMe(c2MousePosition) {  <--------------------- straight from the mouse click
    if (Cesium.defined(scene.globe)) { 
        if(scene.mode !== Cesium.SceneMode.SCENE2D) {
            pickedPosition = pickGlobe(viewer, c2MousePosition, scratchPickCartesian);
        } else {
            pickedPosition = camera.getPickRay(c2MousePosition, scratchZoomPickRay).origin;
        }
    }
}

var pickGlobeScratchRay = new Cesium.Ray();
var scratchRayIntersection = new Cesium.Cartesian3();    
var c2position = new Cesium.Cartesian2();
function pickGlobe(viewer, c2MousePosition, result) {   <--------------------- straight from the mouse click
    c2position = c2MousePosition;   <--------------------- setting to Cartesian2

    var scratchDepthIntersection = new Cesium.Cartesian3();
    if (scene.pickPositionSupported) {
        scratchDepthIntersection = scene.pickPosition(c2MousePosition);  <--------------------- neither works!
    }

}

Aquí están mis variables:

Aquí está el resultado:

Aquí están mis preguntas para que este código funcione:

1. ¿Por qué no se establece scratchDepthIntersection? c2position es un Cartesian2 y c2MousePosition es directo desde mouse.click.position y scratchDepthIntersection es un nuevo Cartesian3.

Respuestas a la pregunta(1)

Su respuesta a la pregunta