Threejs实现卫星太阳板折叠动画,信号发射,姿态调整

简介: Threejs实现卫星太阳板折叠动画,信号发射,姿态调整

1,介绍


该示例使用的是 r95版本Three.js库。

主要实现功能:创建卫星主体,模拟太阳板折叠动画,卫星姿态调整,模拟发射信号。

效果图如下:



2,动画主要说明


1,太阳板折叠动画利用Tweenjs实现动画,太阳板旋转因为Three.js中默认旋转中心为物体自身的中心,所以旋转的时候在外层包裹一层对象,让外层旋转中心设置到想要旋转的位置上,再调整太阳板相对位置到正确的显示位置上。

2,卫星主体主要是用THREE.CylinderGeometry对象创建一个圆柱体和一个雷达圆锥体,并调整到合适的位置。

3,信号波使用THREE.RingGeometry对象创建一个圆环,使用Tweenjs创建动画移动圆环的位置实现雷达播放效果。

4,卫星姿态调整很简单,旋转场景对象THREE.Scene即可。


// 创建一个卫星主体
function createWeiXing() {
  // 创建一个立方体并设置大小
  var wxGeometry = new THREE.CylinderGeometry(5, 5, 20, 100, 0);
  var wxMaterial = new THREE.MeshBasicMaterial({
    color: "#55557f",
  });
  var weixing = new THREE.Mesh(wxGeometry, wxMaterial);
  weixing.position.set(0, 0, 1);
  weixing.rotateZ(-Math.PI / 2);
  scene.add(weixing);
}
// 创建一个雷达
function createLeiDa() {
  // 创建一个立方体并设置大小
  var wxGeometry = new THREE.CylinderGeometry(4, 0, 5, 100, 0);
  var wxMaterial = new THREE.MeshBasicMaterial({
    color: "#ffaa00",
  });
  var weixing = new THREE.Mesh(wxGeometry, wxMaterial);
  weixing.position.set(10, 0, 1);
  weixing.rotateZ(-Math.PI / 2);
  scene.add(weixing);
}
// 雷达信号
function initSatellite(positionX, starLiteRadius) {
  var group = new THREE.Group();
  var obj = scene.getObjectByName("satellite");
  scene.remove(obj);
  var wxMaterial = new THREE.MeshBasicMaterial({
    color: "#ffffff",
    side: THREE.DoubleSide
  });
  var signalGeometry1 = new THREE.RingGeometry(starLiteRadius, starLiteRadius + 0.1, 100, 0);
  var signal1 = new THREE.Mesh(signalGeometry1, wxMaterial);
  signal1.position.z = -1;
  var signalGeometry2 = new THREE.RingGeometry(starLiteRadius + 2, starLiteRadius + 2.1, 100, 0);
  var signal2 = new THREE.Mesh(signalGeometry2, wxMaterial);
  signal2.position.z = -10;
  var signalGeometry3 = new THREE.RingGeometry(starLiteRadius + 3, starLiteRadius + 3.1, 100, 0);
  var signal3 = new THREE.Mesh(signalGeometry3, wxMaterial);
  signal3.position.z = -20;
  group.rotateY(-Math.PI / 2);
  group.position.set(positionX, 0, 1);
  group.name = "satellite";
  group.add(signal1);
  group.add(signal2);
  group.add(signal3);
  scene.add(group);
}

需要学习案例、素材、模型,请进入博客首页查看其他文章或者留言


目录
相关文章
|
前端开发 容器
前端页面布局之【Flex布局】详解
前端页面布局之【Flex布局】详解
706 0
|
Prometheus 监控 Cloud Native
hyperf| hyperf/metric 上手指南
这期又开始聊微服务的基础设施之一: 实时监控. 更准确的说法, 基于 prometheus 的实时监控. 关于技术选型这里就不多啰嗦啦, 很多时候「从众」或者「用脚投票」往往是最有效的
1247 0
|
JavaScript
VUE element-ui之el-form表单点击按钮自动增加表单(输入框),可新增删除
VUE element-ui之el-form表单点击按钮自动增加表单(输入框),可新增删除
2599 0
VUE element-ui之el-form表单点击按钮自动增加表单(输入框),可新增删除
|
数据采集 安全
Burpsuite Scanner扫描功能实现自动化shentou
Burpsuite Scanner扫描功能实现自动化shentou
|
机器学习/深度学习 数据可视化 Swift
Florence-2,小模型推进视觉任务的统一表征
Florence-2是一种新颖的视觉基础模型,具有统一的、基于提示的表示,可用于各种计算机视觉和视觉语言任务。
|
机器学习/深度学习 人工智能 并行计算
Pytorch Lightning使用:【LightningModule、LightningDataModule、Trainer、ModelCheckpoint】
Pytorch Lightning使用:【LightningModule、LightningDataModule、Trainer、ModelCheckpoint】
1565 0
|
运维 网络安全 网络虚拟化
2024网络建设与运维赛题-交换配置教程
SW1, SW2, SW3作为核心交换机,配置了多个VLAN以隔离不同部门的网络,如产品、营销、财务和行政。配置中还包括启用VLAN访问控制,允许特定VLAN通过二层链路,并设置了链路聚合(LACP)以增强SW1和SW2之间的连接可靠性。此外,所有交换机都配置了IP VRF来支持分公司(Branch,RD 1:1)和Internet(RD 2:2)的虚拟专用网络。
2024网络建设与运维赛题-交换配置教程
|
缓存 API Android开发
快速开发android,离不开这10个优秀的开源项目
作为一名菜鸡Android,时常瞻仰大佬们的开源项目是非常必要的。这里我为大家收集整理了10个优秀的开源项目,方便我们日常开发中学习!
3453 0
Vite:rollup-plugin-visualizer查看打包体积分析report报告
Vite:rollup-plugin-visualizer查看打包体积分析report报告
2034 0
Vite:rollup-plugin-visualizer查看打包体积分析report报告
|
JavaScript 前端开发
使用 Vue 3 框架编写的简单日历组件
使用 Vue 3 框架编写的简单日历组件
1125 0