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); }
需要学习案例、素材、模型,请进入博客首页查看其他文章或者留言