Cesium 1.54評(píng)測(cè)

重要功能評(píng)測(cè)

3dtiles數(shù)據(jù)上畫(huà)線(xiàn)和貼紋理

3dtiles數(shù)據(jù)上畫(huà)線(xiàn)和貼紋理

把線(xiàn)條貼到3dtiles上需要用到兩個(gè)屬性:clampToGround和classificationType。

clampToGround屬性用來(lái)表示該線(xiàn)段要貼地。1.54版以后貼地中的字同時(shí)指代地形和3dtiles數(shù)據(jù)。

還有一個(gè)屬性classificationType,則用來(lái)描述是否只貼地形(ClassificationType.TERRAIN),或者只貼3dtiles數(shù)據(jù)(ClassificationType.CESIUM_3D_TILE),或者二者都貼(ClassificationType.BOTH)。默認(rèn)情況下是二者都貼。

Entity API源碼如下:

var polyline2 = viewer.entities.add({
    polyline : {
        positions : positions2,
        clampToGround : true,
        width : 5,
        material : new Cesium.PolylineOutlineMaterialProperty({
            color : Cesium.Color.ORANGE,
            outlineWidth : 2,
            outlineColor : Cesium.Color.BLACK
        })
    }
});

Primitive API源碼如下:

// Polyline Glow
scene.groundPrimitives.add(new Cesium.GroundPolylinePrimitive({
    geometryInstances : new Cesium.GeometryInstance({
        geometry : new Cesium.GroundPolylineGeometry({
            positions : positions,
            width : 10.0
        })
    }),
    appearance : new Cesium.PolylineMaterialAppearance({
        material : Cesium.Material.fromType(Cesium.Material.PolylineGlowType)
    })
}));

Cesium 1.54版本以前,雖然可以做到幾何體貼地,但是只能純色貼入,并不能貼紋理。1.54版本以后,官方終于可以給3dtile數(shù)據(jù)貼上紋理了。效果如下:

3dtile數(shù)據(jù)貼上紋理

源碼如下:

var entity = viewer.entities.add({
    polygon : {
        hierarchy : new Cesium.PolygonHierarchy(Cesium.Cartesian3.fromRadiansArray([-1.3194369277314022, 0.6988062530900625, -1.3193955980204217, 0.6988091578771254, -1.3193931220959367, 0.698743632490865, -1.3194358224045408, 0.6987471965556998])),
        material : '../images/Cesium_Logo_Color.jpg'
    }
});

增加對(duì)webp圖片格式的支持

對(duì)webp圖片格式的支持

Cesium增加了新的示例模型,路徑如下:

/Specs/Data/Models/Box-Textured-Webp/CesiumBoxWebp.gltf

相關(guān)測(cè)試源碼如下:

var viewer = new Cesium.Viewer('cesiumContainer');

var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, 5000.0);
var entity = viewer.entities.add({
    position : position,
    model : {
        uri : '../../../Specs/Data/Models/Box-Textured-Webp/CesiumBoxWebp.gltf',
        minimumPixelSize : 128,
        maximumScale : 20000
    }
});
viewer.trackedEntity = entity;

新增恒向線(xiàn)(rhumb line)繪制多邊形和線(xiàn)段

下圖中綠色線(xiàn)條即恒向線(xiàn)。

綠色線(xiàn)條即恒向線(xiàn)

可以觀察紅色線(xiàn)條和綠色線(xiàn)條的差別:給定的起點(diǎn)和終點(diǎn)相同,但是繪制出來(lái)的線(xiàn)條卻不一樣。其中紅色線(xiàn)條描述的是地表最近距離的曲線(xiàn),而綠色線(xiàn)條則描述的是恒向線(xiàn),任意位置的延伸方向都是恒定的。圖中起點(diǎn)和終點(diǎn)的緯度都是35,所以綠色線(xiàn)條是和35度緯度線(xiàn)是重合的。

源碼如下:

var redLine = viewer.entities.add({
    name : 'Red line on terrain',
    polyline : {
        positions : Cesium.Cartesian3.fromDegreesArray([-75, 35,
                                                        -125, 35]),
        width : 5,
        material : Cesium.Color.RED,
        clampToGround : true
    }
});

var greenRhumbLine = viewer.entities.add({
    name : 'Green rhumb line',
    polyline : {
        positions : Cesium.Cartesian3.fromDegreesArray([-75, 35,
                                                        -125, 35]),
        width : 5,
        arcType : Cesium.ArcType.RHUMB,
        material : Cesium.Color.GREEN
    }

新增了兩個(gè)示例

新增了兩個(gè)示例

Polylines on 3D Tiles示例

Polylines on 3D Tiles示例用來(lái)描述將線(xiàn)段貼到3dtiles上,其中3dtiles數(shù)據(jù)有有兩類(lèi)。一類(lèi)是傾斜攝影的,另外一類(lèi)是BIM的。在電廠BIM模型的示例中可以看出,線(xiàn)條是貼在BIM模型的管線(xiàn)上的。

點(diǎn)擊查看本地Demo(需要本地編譯源碼才可使用)

Polylines on 3D Tiles
Polylines on 3D Tiles

從上面的截圖可以看出,貼地模式下線(xiàn)條是貼到3dtiles數(shù)據(jù)上了,不過(guò)會(huì)從上往下貫穿所有地方,畢竟沒(méi)有高度上的限制,這樣的話(huà),對(duì)于BIM數(shù)據(jù)其實(shí)還是有問(wèn)題的。有些地方并沒(méi)有管線(xiàn),但是照樣會(huì)畫(huà)上線(xiàn)條。

Polylines on 3D Tiles
Polylines on 3D Tiles

貼地模式使用起來(lái)也很簡(jiǎn)單,只需要用到clampToGround和classificationType屬性,另外注意一下,height不要賦值。源碼截取如下:

var powerplant = scene.primitives.add(
    new Cesium.Cesium3DTileset({
        url: Cesium.IonResource.fromAssetId(8564),
        show: false
    })
);
var pipes = viewer.entities.add({
    polyline : {
        positions : Cesium.Cartesian3.fromDegreesArray([
            -76.36053390920833, 34.949935893493596,
            -76.36055481641581, 34.94993589886988,
            -76.36055477047704, 34.94992280693651
        ]),
        width : 6,
        material : new Cesium.PolylineDashMaterialProperty({
            color : Cesium.Color.YELLOW,
            dashLength: 20.0
        }),
        show: false,
        clampToGround : true,
        classificationType: Cesium.ClassificationType.CESIUM_3D_TILE
    }
});

Time Dynamic Wheels示例

這個(gè)示例用來(lái)展示輪胎轉(zhuǎn)速隨車(chē)輛運(yùn)動(dòng)速度快慢自動(dòng)調(diào)整。該示例代碼則描述如何將position轉(zhuǎn)化為速度,再轉(zhuǎn)化為輪胎轉(zhuǎn)動(dòng)角度,最后通過(guò)nodeTransformations屬性作用于Model,從而實(shí)現(xiàn)車(chē)輛輪胎的轉(zhuǎn)動(dòng)。

輪胎轉(zhuǎn)速隨車(chē)輛運(yùn)動(dòng)速度快慢自動(dòng)調(diào)整
輪胎轉(zhuǎn)速隨車(chē)輛運(yùn)動(dòng)速度快慢自動(dòng)調(diào)整

源碼截取如下,position是一個(gè)SamplePositionProperty,通過(guò)在不同的時(shí)間點(diǎn)上設(shè)置不同的運(yùn)動(dòng)位置,來(lái)創(chuàng)建一個(gè)加速運(yùn)動(dòng)的車(chē)輛。velocityVectorProperty則根據(jù)position計(jì)算出每個(gè)時(shí)間點(diǎn)的速度。再由速度計(jì)算出輪胎轉(zhuǎn)動(dòng)的角度。(注:貌似這個(gè)地方的角度計(jì)算只是近似值,只有numberOfSamples越大時(shí)越準(zhǔn)確。)

var numberOfSamples = 100;
for (var i = 0; i <= numberOfSamples; ++i) {
    var factor = (i / numberOfSamples);
    var time = Cesium.JulianDate.addSeconds(start, factor * totalSeconds, new Cesium.JulianDate());

    // Lerp using a non-linear factor so that the vehicle accelerates.
    var locationFactor = Math.pow(factor, 2);
    var location = Cesium.Cartesian3.lerp(startPosition, endPosition, locationFactor, new Cesium.Cartesian3());
    position.addSample(time, location);
    // Rotate the wheels based on how fast the vehicle is moving at each timestep.
    velocityVectorProperty.getValue(time, velocityVector);
    var metersPerSecond = Cesium.Cartesian3.magnitude(velocityVector);
    var wheelRadius = 0.52;//in meters.
    var circumference = Math.PI * wheelRadius * 2;
    var rotationsPerSecond = metersPerSecond / circumference;

    wheelAngle += ((Math.PI * 2 * totalSeconds) / numberOfSamples) * rotationsPerSecond;
    wheelAngleProperty.addSample(time, wheelAngle);
}

其他方面

  1. Entity API中的多個(gè)圖形的classificationType屬性的默認(rèn)值修改成了ClassificationType.BOTH,也就是說(shuō),如果貼地,則會(huì)同時(shí)往地形和3dtiles數(shù)據(jù)上貼。

  2. ModelAnimation.speedup已刪除,需要使用ModelAnimation.multiplier來(lái)代替。

  3. Scene.clampToHeight方法增加了width參數(shù),需要留意。

clampToHeight
  1. PolylineGeometry和SimplePolylineGeometry的followSurface屬性被替換成arcType,arcType的值可以是ArcType.NONE、ArcType.GEODESIC和ArcType.RHUMB。

  2. 3dtiles性能有所提升(IBL導(dǎo)致)


歡迎關(guān)注 Cesium實(shí)驗(yàn)室 ,QQ群號(hào):595512567。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 14,996評(píng)論 4 61
  • 以前看電視,看到狗血的劇情,我都會(huì)想給編劇寄刀片,我覺(jué)得故事離譜的離開(kāi)現(xiàn)實(shí)生活太遠(yuǎn),直到這樣的故事真的發(fā)生在自己身...
    溜溜小閱讀 432評(píng)論 2 2
  • 這本書(shū)是有韓國(guó)作家樸范信寫(xiě)的小說(shuō)《銀嬌》,也被翻拍成同名的電影,我是先看了電影,然后時(shí)隔四年之后再看了中譯本的小說(shuō)...
    転調(diào)閱讀 4,188評(píng)論 0 0
  • 前言:這是我的專(zhuān)輯自然物語(yǔ)的第一篇,自從寫(xiě)了序篇,終于有時(shí)間再動(dòng)動(dòng)筆了。放假真是好??!本來(lái)還在打代碼做項(xiàng)目的 ,不...
    龐貝船長(zhǎng)閱讀 323評(píng)論 0 0
  • 2017-12-25 。。。。。。
    大大無(wú)米粿閱讀 201評(píng)論 0 0

友情鏈接更多精彩內(nèi)容