Viewer 基础
Viewer 是 Tellux 的公开 API 门面,负责装配渲染器、场景、相机、地形、图层、采样、模型和后处理模块。
常用属性
viewer.scene
viewer.camera
viewer.clock
viewer.overlays
viewer.tilesets
viewer.models
viewer.terrain
viewer.globe
viewer.renderer
viewer.postProcess
viewer.highlighter
viewer.controls
viewer.hism
viewer.entities这些属性暴露的是面向应用侧的控制入口。业务代码优先通过这些入口操作,不建议直接穿透内部模块状态。
场景时钟
viewer.clock 是统一的场景模拟时间源。初始化和运行时使用同一字段路径;配置边界支持 Date、日期字符串和毫秒时间戳,运行时赋值只接受有效 Date:
const viewer = new Viewer(container, {
clock: {
currentTime: '2026-09-01T08:00:00Z',
shouldAnimate: true,
multiplier: 3600
}
})
viewer.clock.currentTime = new Date()
viewer.clock.shouldAnimate = falseClock 当前自动驱动太阳、月亮和大气方向。业务轨迹或实体动画不会被内置实现自动更新,但可以监听 change 或 tick 事件接入同一时间源。负 multiplier 表示倒放。
Timeline 控件将这个绝对时间点转换为浏览器本地时间显示,默认范围是当前本地自然日。跨越夏令时切换时,一天可能是 23 或 25 小时,控件会保持本地日期和钟点语义。
启用 Timeline 且省略 Clock 配置时,时钟默认从当前真实时间开始以 1× 流动;显式配置 clock.shouldAnimate: false 可保持初始暂停。
Timeline 的日序、倍率和时间滑块支持按住后移出轨道继续拖动,松开时采用最终指针位置,也支持键盘方向键调整。滑块读数立即更新;时间调整的 spring 只平滑场景时钟,不延迟滑块位置。
场景配置
scene 配置按能力分组:atmosphere 管大气、天空和光照,clouds 管体积云,surface 管基础地球表面材质。后处理在顶层 postProcess。
const viewer = new Viewer(container, {
scene: {
atmosphere: {
lighting: {
mode: 'light-source'
},
scattering: {
intensity: 0.6
}
},
clouds: {
show: true,
quality: 'medium',
coverage: 0.35
}
},
postProcess: {
toneMapping: { exposure: 5 },
smaa: true,
taa: false // 仅 WebGPU;按需启用
}
})运行时控制入口保持同样的层级:
viewer.scene.atmosphere.lighting.mode = 'post-process'
viewer.scene.atmosphere.sky.stars.show = false
viewer.scene.clouds.quality = 'high'
viewer.globe.material.mode = 'auto'
viewer.globe.opacity = 1
viewer.postProcess.smaa.enabled = true
viewer.postProcess.taa.enabled = true // WebGPU上面的示例只展示了常用字段。ViewerOptions 的全部配置项(地形、相机、大气散射参数、云、后处理、renderer、控件等)及每个字段的默认值、单位和取值说明,见 类型入口 — 配置项参考。
渲染循环
默认情况下,Tellux 会接管 renderer.setAnimationLoop。
viewer.useDefaultRenderLoop = true如果你需要把 Tellux 嵌入已有 Three.js 渲染循环,可以关闭默认循环并手动推进:
viewer.useDefaultRenderLoop = false
function animate(time: number) {
viewer.render(time)
requestAnimationFrame(animate)
}
requestAnimationFrame(animate)Renderer 类型
默认情况下,Viewer 使用 Three.js WebGLRenderer。可以通过 renderer.type 选择实验性的 WebGPU renderer:
const viewer = await Viewer.create(container, {
renderer: {
type: 'webgpu'
},
scene: {
atmosphere: {
show: true,
lighting: {
mode: 'light-source'
}
},
clouds: {
show: false
}
}
})WebGPU renderer 需要异步初始化。使用 Viewer.create() 会在返回前等待 viewer.ready;如果使用 new Viewer(),在外部手动渲染循环里建议先等待:
const viewer = new Viewer(container, {
renderer: {
type: 'webgpu'
},
useDefaultRenderLoop: false
})
await viewer.ready
viewer.render()WebGPU 支持目前是实验能力。基础地球、3D Tiles、地形、影像、模型、拾取、大气天空 / 空气透视和星空会走 WebGPU 管线;体积云以及 SMAA、抖动等 WebGL 后处理会降级为不渲染。postProcess.lensFlare 已复用同一套强度、阈值与质量档 API;postProcess.taa 是已支持的时间抗锯齿,默认关闭,启用后会使用高精度运动矢量和深度重投影历史画面。两者的图顺序为 LensFlare → TAA。星空沿用 scene.atmosphere.sky.stars 的 show、intensity 与 pointSize 配置。WebGPU 大气首版使用 Takram node-based 管线,light-source 光照模式支持更完整,部分 WebGL 专属的散射调试参数暂不映射。
事件
Viewer 目前提供 click 和 mousemove 事件。事件会返回 canvas 像素坐标,以及当前命中的经纬高。
viewer.on('click', (event) => {
console.log(event.position)
console.log(event.cartographic)
})