Skip to content

Latest commit

 

History

History
105 lines (76 loc) · 3.95 KB

README_code.md

File metadata and controls

105 lines (76 loc) · 3.95 KB

Cesium 局部代码

初始显示的是中国

Cesium.Camera.DEFAULT_VIEW_RECTANGLE = Cesium.Rectangle.fromDegrees(73.0, 3.0, 135.0, 53.0);
viewer.camera.flyHome(5);

相机进入地下问题

***scene下的ScreenSpaceCameraController代码

function pickGlobe(controller, mousePosition, result) {
    var scene = controller._scene;
    var globe = controller._globe;
    var camera = scene.camera;

    if (!defined(globe)) {
        return undefined;
    }

    var depthIntersection;
    if (scene.pickPositionSupported) {
        depthIntersection = scene.pickPositionWorldCoordinates(mousePosition, scratchDepthIntersection);
    }

    var ray = camera.getPickRay(mousePosition, pickGlobeScratchRay);
    var rayIntersection = globe.pick(ray, scene, scratchRayIntersection);

    var pickDistance = defined(depthIntersection) ? 
            Cartesian3.distance(depthIntersection, camera.positionWC) : Number.POSITIVE_INFINITY;
    
    var rayDistance = defined(rayIntersection) ? 
            Cartesian3.distance(rayIntersection, camera.positionWC) : Number.POSITIVE_INFINITY;

    if (pickDistance < rayDistance) {
        return Cartesian3.clone(depthIntersection, result);
    }

    return Cartesian3.clone(rayIntersection, result);
}       

调整3DTiles的整体高度

function(height) {
    height = Number(height);
    if (isNaN(height)) {
        return;
    }

    var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);
    var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0);
    var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height);
    var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
    tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
} 

根据坐标获取3D Tiles的高度

Scene.clampToHeight(cartesian, objectsToExclude, width, result) → Cartesian3
Scene.clampToHeightMostDetailed(cartesians, objectsToExclude, width) → Promise.<Array.<Cartesian3>>

*** objectsToExclude ----> A list of primitives, entities, or 3D Tiles features to not clamp to.       

entity贴对象

var route = viewer.entities.add({
    polyline : {
        positions : [.....]
        clampToGround : true,
        classificationType: Cesium.ClassificationType.CESIUM_3D_TILE
    }
});         

获取起点和终点之间的表面距离,表面插值

var geodesic = new Cesium.EllipsoidGeodesic(start, end, ellipsoid);
geodesic.setEndPoints(startCartographic, endCartographic);
geodesic.interpolateUsingFraction(fraction, result) → Cartographic
geodesic.interpolateUsingSurfaceDistance(distance, result) → Cartographic

模型建组(图层集合)

var spheres = entities.add(new Cesium.Entity()); // 图层
entities.add({
    parent : boxes, // 父容器
    position : Cesium.Cartesian3.fromDegrees(-106.0, 45.0, height),
    box : {
        dimensions : new Cesium.Cartesian3(90000.0, 90000.0, 90000.0),
        material : Cesium.Color.fromRandom({alpha : 1.0})
    }
});
spheres.show = !spheres.show; // 显示/隐藏

计算点距离某一个平面的距离

Cesium.Plane.getPointDistance(plane, point) → Number
计算点到平面的最短距离。距离决定了该点所在平面的哪一侧。如果距离为正,则该点位于法线方向的半空间中; 如果为负,则该点位于与正常相反的半空间中; 如果为零,则该点在平面上。

Cesium.Plane.projectPointOntoPlane(plane, point, result) → Cartesian3
计算点在平面上的投影点

对数深度

我们封装的属性叫  earth.terrainEffect.logDepth 
cesium对应的属性 scene.logarithmicDepthBuffer