Skip to content

材质与渲染工具(Materials & Utils)

提供自定义材质注册、动态材质属性、离屏渲染工具以及底图图层工厂等功能。


CsmMaterial — 材质注册器

静态类,通过 Cesium.Material._materialCache.addMaterial 注册自定义 GLSL 材质。

方法:

typescript
CsmMaterial.addMaterial(options: MaterialOptions): void

参数:

参数类型说明
typestring材质类型名称(如 'EllipsoidMove'
fabric.typestringFabric 材质类型标识
fabric.uniformsRecord<string, any>材质 uniform 初始值
fabric.sourcestringGLSL shader 源码

示例:

typescript
import { CsmMaterial } from './materials/Material'

// 注册自定义材质
CsmMaterial.addMaterial({
  type: 'MyCustomMaterial',
  fabric: {
    type: 'MyCustomMaterial',
    uniforms: {
      color: new Cesium.Color(1.0, 0.0, 0.0, 1.0),
      speed: 1.0
    },
    source: `
      czm_material czm_getMaterial(czm_materialInput materialInput) {
        czm_material material = czm_getDefaultMaterial(materialInput);
        material.diffuse = vec3(1.0, 0.0, 0.0);
        return material;
      }
    `
  }
})

// 使用材质
entity.polyline.material = new Cesium.Material({
  fabric: { type: 'MyCustomMaterial' }
})

注意: 注册后可通过 Cesium.Material.MyCustomMaterialType 访问材质类型常量。


PolylineDashMoveMaterialProperty — 移动虚线折线材质

支持动画移动效果的虚线折线材质。底层 GLSL 位于 Shaders/PolylineDashMoveMaterial.glsl

构造参数:

typescript
interface PolylineDashMoveMaterialPropertyOptions {
  color?: Cesium.Color | Cesium.Property   // 线段颜色,默认 WHITE
  gapColor?: Cesium.Color | Cesium.Property // 间隔颜色,默认 TRANSPARENT
  dashLength?: number | Cesium.Property     // 虚线长度,默认 16.0
  dashPattern?: number | Cesium.Property    // 虚线图案,默认 255.0
}

参数表:

选项类型默认值说明
colorColor | PropertyColor.WHITE线段颜色
gapColorColor | PropertyColor.TRANSPARENT间隔颜色
dashLengthnumber | Property16.0每段虚线长度
dashPatternnumber | Property255.0虚线图案掩码

示例:

typescript
entity.polyline.material = new PolylineDashMoveMaterialProperty({
  color: Cesium.Color.CYAN,
  dashLength: 32,
  dashPattern: 255
})

EllipsoidMoveMaterialProperty — 移动椭球体轮廓材质

支持动画移动效果的椭球体轮廓材质。底层 GLSL 位于 Shaders/EllipsoidMoveMaterial.glsl

构造参数:

typescript
interface EllipsoidMoveMaterialPropertyOptions {
  color?: Cesium.Color | Cesium.Property   // 轮廓颜色,默认 WHITE
  speed?: number | Cesium.Property         // 移动速度
}

参数表:

选项类型默认值说明
colorColor | PropertyColor.WHITE椭球轮廓颜色
speednumber | Property动画移动速度

示例:

typescript
entity.ellipsoid.material = new EllipsoidMoveMaterialProperty({
  color: Cesium.Color.MAGENTA
})

离屏渲染工具

createFrameBuffer — 创建帧缓冲对象

创建 Cesium Framebuffer,用于离屏渲染。

typescript
import { createFrameBuffer } from './utils/createFrameBuffer'

const fbo = createFrameBuffer(viewer.scene)
// fbo 的颜色纹理尺寸与 drawingBuffer 一致

参数:

参数类型说明
sceneCesium.SceneCesium 场景对象

内部实现: 创建 Cesium.Texture(RGBA,drawingBuffer 尺寸)作为颜色附件。

createFboCamera — 创建离屏渲染相机

创建独立 Camera 用于离屏渲染。

typescript
import { createFboCamera } from './utils/createFboCamera'

const camera = createFboCamera(viewer.scene, true) // frustumBool=true 显示调试相机

参数:

参数类型默认值说明
sceneCesium.Scene场景对象
frustumBoolbooleanfalse是否显示调试相机线框(DebugCameraPrimitive

默认相机位置: (126.30°, 35.02°, 200km),东北天视角。

示例(结合离屏渲染 Mixin):

typescript
import { createFrameBuffer } from './utils/createFrameBuffer'
import { createFboCamera } from './utils/createFboCamera'

// 创建离屏渲染资源
const fbo = createFrameBuffer(viewer.scene)
const camera = createFboCamera(viewer.scene)
const canvas = document.createElement('canvas')
canvas.width = 512
canvas.height = 512

// 单次渲染
viewer.renderToCanvas(fbo, camera, canvas)

// 实时帧同步渲染
viewer.startRealTimeRenderToCanvas(fbo, camera, canvas)
// viewer.endRealTimeRenderToCanvas()  // 停止

getAssetUrl — 资源路径解析

解析 Vite 项目静态资源路径,将 @/ 别名转为相对路径。

typescript
import { getAssetUrl } from './tools/asset'

const url = getAssetUrl('@/assets/maps/world.png')
// 返回: '/src/assets/maps/world.png'

参数:

参数类型说明
pathstring资源路径(支持 @/ 别名)

BaseLayerProvider — 底图图层工厂

提供预设底图和自定义底图的创建,支持多种地图服务类型。

静态方法:

方法返回类型说明
BaseLayerProvider.create(config, options?)ImageryProvider | null创建底图提供者
BaseLayerProvider.getPresets()PresetLayerInfo[]获取预设底图列表
BaseLayerProvider.createFromUrl(url)ImageryProvider | null智能识别 URL 类型并创建

预设类型(PresetBaseLayerType):

类型别名说明
'osm''openstreetmap'OpenStreetMap 标准瓦片
'gaode-img''gaode'高德影像地图
'gaode-vec'高德矢量地图
'none''null' / 'false'无底图

自定义类型(CustomBaseLayerType):

类型别名说明
'xyz''url' / 'tile'XYZ 瓦片服务
'wms'OGC WMS 服务
'arcgis'ArcGIS MapServer
'single''image'单张图片底图

示例:

typescript
import { BaseLayerProvider } from './providers/BaseLayerProvider'

// 预设底图
const osmProvider = BaseLayerProvider.create('osm')

// 高德影像
const gaodeProvider = BaseLayerProvider.create('gaode-img')

// 自定义 XYZ 瓦片
const customProvider = BaseLayerProvider.create({
  type: 'xyz',
  url: 'https://example.com/{z}/{x}/{y}.png',
  maximumLevel: 19
})

// 获取预设列表
const presets = BaseLayerProvider.getPresets()
// [{ key: 'osm', name: 'OpenStreetMap', needToken: false }, ...]

参数表(CustomBaseLayerConfig):

属性类型必填说明
typeCustomBaseLayerType服务类型
urlstring服务 URL
layersstringWMS 图层名称
maximumLevelnumber最大缩放级别
minimumLevelnumber最小缩放级别
tileWidthnumber瓦片宽度(single 类型)
tileHeightnumber瓦片高度(single 类型)
rectangleRectangle矩形范围(single 类型)
subdomainsstring[]子域名列表
creditstring版权信息