Skip to content

3d 文字

问题背景

需要在 cesium 场景中加载 3d 文字,发现没有这个接口,手动实现。

参数类型
文字内容String 示例文字 字符串
矩形位置Array [109, 42, 100] 经纬度&高程
矩形大小Object {length: Num, width: Num} 数组
矩形旋转信息Array [0, 0, 0, 1] 四元数

思路一

通过渲染自定义的 Plane,然后贴文字纹理来实现,需确认默认的法线方向,然后以此为基准应用四元数确定最终位置

js
const viewer = new Cesium.Viewer("cesiumContainer");
let a = new Cesium.Cartesian3(1, 1, 0.5); //测试数据
let b = new Cesium.Cartesian3();
Cesium.Cartesian3.normalize(a, b); //自定义法线方向
const bluePlane = viewer.entities.add({
  name: "Blue plane",
  orientation: new Cesium.Quaternion(-0.014949, 0.706949, 0.706949, -0.014949),
  position: Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 405.700312),
  plane: {
    plane: new Cesium.Plane(b, 0),
    // plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Z, 0), //默认法线方向
    dimensions: new Cesium.Cartesian2(400000.0, 300000.0),
    material: Cesium.Color.BLUE,
    // material:  "../images/Cesium_Logo_Color.jpg", //贴图
  },
});

思路二 12/13/2024

基于 WebGL 重新实现 3d 文字,较复杂

最新思路:

  • LabelCollection
  • 矩形图元
  • 传入坐标与形态