【Cesium】 Primitive创建形状基础---贴地几何体

一、贴地线

// 创建贴地线段几何实例
const instance = new Cesium.GeometryInstance({
    id: "PolylineGeometry",
    geometry: new Cesium.GroundPolylineGeometry({
        positions: Cesium.Cartesian3.fromDegreesArray([
            108.0, 31.0,
            100.0, 36.0,
            105.0, 39.0
        ]),
        width: 10.0,
    })
});
 
// 根据几何实例创建贴地图元
const primitive = new Cesium.GroundPolylinePrimitive({
    geometryInstances: instance,
    appearance: new Cesium.PolylineMaterialAppearance({
        material: Cesium.Material.fromType('Color'),
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)
 
// 定位到指定模型位置
viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(108.0, 31.0, 13000000),
    orientation: {
        heading: Cesium.Math.toRadians(0),
        pitch: Cesium.Math.toRadians(-90),
        roll: 0
    },
    duration: 2.0  // 飞行动画的持续时间(单位是秒)
});

二、贴地多边形

// 创建贴地面几何实例
const instance = new Cesium.GeometryInstance({
    id: "PolygonGeometry",
    geometry: new Cesium.PolygonGeometry({
        polygonHierarchy: new Cesium.PolygonHierarchy(
            Cesium.Cartesian3.fromDegreesArray([
                -72.0, 40.0,
                -70.0, 35.0,
                -75.0, 30.0,
                -70.0, 30.0,
                -68.0, 40.0
            ])
        )
    }),
});
 
// 根据几何实例创建贴地面图元
const primitive = new Cesium.GroundPrimitive({
    geometryInstances: instance,  //可以是实例数组
    appearance: new Cesium.MaterialAppearance({
        material: Cesium.Material.fromType('Color', {
            color: Cesium.Color.BLUE
        }),
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)
 
// 定位到指定模型位置
viewer.camera.flyTo({
    destination: Cesium.Cartesian3.fromDegrees(-72.0, 40, 13000000),
    orientation: {
        heading: Cesium.Math.toRadians(0),
        pitch: Cesium.Math.toRadians(-90),
        roll: 0
    },
    duration: 2.0  // 飞行动画的持续时间(单位是秒)
});

三、贴地椭圆

// 创建椭圆几何实例
const instance = new Cesium.GeometryInstance({
    geometry: new Cesium.EllipseGeometry({
        center: Cesium.Cartesian3.fromDegrees(-100.0, 20.0),
        semiMinorAxis: 500000.0, // semiMinorAxis和semiMajorAxis值相等则为圆形
        semiMajorAxis: 1000000.0,
        rotation: Cesium.Math.PI_OVER_FOUR,
        vertexFormat: Cesium.VertexFormat.POSITION_AND_ST,
    }),
    id: "EllipseGeometry",
});
 
// 根据几何实例创建贴地椭圆图元
const primitive = new Cesium.GroundPrimitive({
    geometryInstances: instance,  //可以是实例数组
    appearance: new Cesium.EllipsoidSurfaceAppearance({
        material: Cesium.Material.fromType('Color')
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)

四、贴地圆形

// 创建圆形几何实例
const instance = new Cesium.GeometryInstance({
    id: "CircleGeometry",
    geometry: new Cesium.CircleGeometry({
        center: Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
        radius: 100000.0,
        extrudedHeight: 20000 // 圆形高度,形成圆柱
    })
});
 
 
// 根据几何实例创建图元
const primitive = new Cesium.GroundPrimitive({
    geometryInstances: instance,  //可以是实例数组
    appearance: new Cesium.MaterialAppearance({
        material: Cesium.Material.fromType('Color'),
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)

五、贴地连廊

// 创建连廊几何实例
const instance = new Cesium.GeometryInstance({
    id: "CorridorGeometry",
    geometry: new Cesium.CorridorGeometry({
        vertexFormat: Cesium.VertexFormat.POSITION_ONLY,
        positions: Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0, -68.0, 38.0]),
        width: 100000,
        extrudedHeight: 1000
    }),
    attributes: {
        color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)
    },
});
 
// 根据几何实例创建贴地连廊图元
const primitive = new Cesium.GroundPrimitive({
    geometryInstances: instance,  //可以是实例数组
    appearance: new Cesium.PerInstanceColorAppearance({
        flat: true,
        translucent: false
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)

六、贴地矩形

// 创建矩形几何实例
const instance = new Cesium.GeometryInstance({
    id: "RectangleGeometry",
    geometry: new Cesium.RectangleGeometry({
        ellipsoid: Cesium.Ellipsoid.WGS84,
        rectangle: Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),
        height: 10000.0
    }),
    attributes: {
        color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)
    },
});
 
// 根据贴地矩形实例创建图元
const primitive = new Cesium.GroundPrimitive({
    geometryInstances: instance,  //可以是实例数组
    appearance: new Cesium.PerInstanceColorAppearance({
        flat: true,
        translucent: false
    })
});
 
// 将图元添加到集合
viewer.scene.primitives.add(primitive)
Cesium中,可以利用`Primitive`创建几何体并对其应用纹理贴图。以下是关于如何通过`Primitive`实现圆柱侧面贴图的一个简单介绍: ### 创建带贴图的圆柱侧面 1. **准备材质** 首先需要加载一张图片作为材质,并将其分配给圆柱面。这可以通过 `Material.fromType` 或直接设置自定义材质来完成。 2. **构建几何结构** 使用 `CylinderGeometry` 来生成圆柱的顶点数据。注意仅需保留圆柱侧表面部分(可通过选项控制上下底是否可见)。 3. **添加纹理坐标 (UV Mapping)** 确保生成的几何体包含正确的 UV 坐标信息以便正确映射图像到模型上。通常默认情况下会有合理的分布。 4. **实例化 Primitive 并附加材质与几何体** 最后一步就是把构造好的几何体连同所选材质一起传入至 `createPrimitive` 函数内形成最终图形对象,然后加入场景树显示出来。 ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); viewer.scene.primitives.add(new Cesium.Primitive({ geometryInstances : new Cesium.GeometryInstance({ geometry : new Cesium.CylinderGeometry({ length : 200000, topRadius : 100000, bottomRadius : 100000 }), attributes: { st: Cesium.geometryInstanceAttributeFromFunction(function() { /* 自定义uv */ }) } }), appearance : new Cesium.MaterialAppearance({ material : Cesium.Material.fromType('Image', { image : 'path/to/your/image.jpg' }) }) })); ``` 上述代码仅为示意图,在实际操作过程中还需要调整细节如路径、缩放比例等才能达到理想效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼遇雨愈愉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值