数字孪生-DTS-孪创城市-天气功能

前言

今天我们来做天气这一板块的功能,主要的功能有

  1. 控制天气为晴天,阴天,小雨,小雪。
  2. 拖动时间滑块控制一天的时间。
  3. 控制三维场景是否为暗黑模式
  4. 初始化三维场景功能 主要涉及到的组件在weather这里

控制天气为晴天,阴天,小雨,小雪

思路

点击不同的按钮,传入不同的参数,然后根据参数调用飞渡api的weather类里面的api即可,里面可以设置很多丰富天气相关的参数,比如关照强度,云层密度,雨雪效果等等。

kotlin 复制代码
//天气的点击事件
const WeatherClick = (val: any) => {
  fdapi.weather.disableRainSnow()// 清除雨雪效果

  switch (val.name) {
    case '晴天':
      fdapi.weather.setCloudDensity(0)// 设置云层的密度
      fdapi.weather.setSunIntensity(15)// 设置太阳光照射强度
      break
    case '阴天':
      fdapi.weather.setCloudDensity(0.8)
      fdapi.weather.setCloudParam([0.6, 0.6, 0.6, 1], 3)// 设置云效参数
      fdapi.weather.setLowCloud(0.7, 0.5, 0.2, 5, 0)// 设置低云层效果参数
      fdapi.weather.setSunIntensity(7)
      break
    case '小雨':
      fdapi.weather.setCloudDensity(0.8)
      fdapi.weather.setCloudParam([0.6, 0.6, 0.6, 1], 3)
      fdapi.weather.setLowCloud(0.7, 0.5, 0.2, 5, 0)
      fdapi.weather.setSunIntensity(8)
      fdapi.weather.setRainParam(0.2, 0.2, 0.2, null, 0.2, 0.05)// 设置雨效。注意:开启雨效前需先设置云层的厚度和密度
      break
    case '小雪':
      fdapi.weather.setCloudDensity(0.8)
      fdapi.weather.setCloudParam([0.6, 0.6, 0.6, 1], 3)
      fdapi.weather.setLowCloud(0.7, 0.5, 0.2, 5, 0)
      fdapi.weather.setSunIntensity(8)
      fdapi.weather.setSnowParam(0.2, 0.2, 0.2, null, 0.2, 0.05)// 设置雪效。注意:开启雨效前需先设置云层的厚度和密度
      break
    default:
      break
  }
}
涉及到的飞渡api

主要是在weather这个类里面的api

  1. 设置云层的密度-fdapi.weather.setCloudDensity(0)
  2. 设置太阳光照射强度-fdapi.weather.setSunIntensity(15)
  3. 设置云效参数-fdapi.weather.setCloudParam([0.6, 0.6, 0.6, 1], 3)
  4. 设置雨效-fdapi.weather.setRainParam(0.2, 0.2, 0.2, null, 0.2, 0.05)
  5. 设置雪效-fdapi.weather.setSnowParam(0.2, 0.2, 0.2, null, 0.2, 0.05)
  6. 清除雨雪效果-fdapi.weather.disableRainSnow()

拖动时间滑块控制一天的时间

思路

在el-slider的change事件中,调用飞渡api中的setDateTime接口即可,主要是入参的格式需要格式化一下,将el-slider绑定的值转换为时间。

typescript 复制代码
const changeTimeSilde = async (val: number) => {
  let result = (val / 60 / 60).toFixed(2).split('.')
  let hour = result[0]
  let minutes = (~~(Number('0.' + result[1]) * 60)).toString().padStart(2, '0')
  fdapi.weather.setDateTime(null, null, null, Number(hour), Number(minutes))// 
}
涉及到的飞渡api

设置日期时间-fdapi.weather.setDateTime((year, month, day, hour, minute, daynightLoop, fn)

控制三维场景是否为暗黑模式

思路

这个功能没什么好讲的,主要的效果就是场景的亮度会变暗。点击按钮然后往飞渡的api里面传一个bool值即可

kotlin 复制代码
const changeDarkMode = (val: boolean) => {
  fdapi.weather.setDarkMode(val)// 开启关闭暗黑模式
}
涉及到的飞渡api

开启/关闭黑暗模式-fdapi.weather.setDarkMode()

初始化三维场景功能

思路

首先需要将视角切换到初始视角,会用到camera这个类,这个类主要都是相机相关功能,里面有一个播放导览功能,在导览里面可以设置我们一开始初始化的天气和时间,只需要传入导览的id即可,所以一开始我们需要获取到acp工程里面所有的导览,同样我们也是在视频流实例化完成之后获取,并将他存放在pinia中。

typescript 复制代码
export const _onReady = async () => {
    await fdapi.reset(1 | 2 | 4)// 对三维场景执行重置操作
    const { infotree } = await fdapi.infoTree.get();// 获取图层树信息
    const infoTreeObj: any = {};
    infotree.forEach((item: { iD: string; name: string }) => {
        infoTreeObj[item.name] = item.iD
    })
    DigitalTwinStore.setDigitalTwin(infoTreeObj);// 设置信息树
    DigitalTwinStore.setIsOnReady(true);// 页面初始化完成

    const animationObj: any = {}
    const { data } = await fdapi.camera.getAnimationList()// 获取导览列表
    data.forEach((item: { id: string; name: string }) => {
        animationObj[item.name] = item.id
    })
    DigitalTwinStore.setAnimationObj(animationObj)
}

然后将时间设置为初始时间,将模式退出暗黑模式。

ini 复制代码
//初始化天气
const weatherInit = () => {
  fdapi.camera.playAnimation(DigitalTwinStore.animationObj['初始视角'])// 播放导览
  isDark.value = false
  currentTime.value = 8 * 60 * 60 + 53 * 60
}
涉及到的飞渡api
  1. 获取导览列表-fdapi.camera.getAnimationList()

  2. 播放导览-fdapi.camera.playAnimation(DigitalTwinStore.animationObj['初始视角'])

相关推荐
憧憬成为web高手5 小时前
ACTF 12307复现
前端·bootstrap·html
wordbaby6 小时前
Axios 上传大文件崩溃:鸿蒙 RNOH 下 XHR 返回空响应头引发的"假失败"
前端·react native
wordbaby6 小时前
React Native 列表分页实战:下拉刷新与上拉加载的工程化方案
前端·react native
wordbaby7 小时前
脱离 Tab 栏的艺术:React Native 全屏子页面的导航架构实践
前端·react native·harmonyos
陈随易7 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
wordbaby7 小时前
React Native 新架构落地鸿蒙:跨三端政务级应用的工程实践与深度复盘
前端·react native·harmonyos
excel9 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
ZC跨境爬虫9 小时前
模块化烹饪小程序开发日记 Day7:(菜谱详情接口开发与JSON数据读取全流程)
前端·javascript·css·ui·微信小程序·json
এ慕ོ冬℘゜9 小时前
JS 前端基础面试题
开发语言·前端·javascript
LaughingZhu9 小时前
Product Hunt 每日热榜 | 2026-05-25
前端·人工智能·经验分享·chatgpt·html