当前位置:   article > 正文

Threejs实现WebVR全景小行星入场动画/鱼眼效果/球形展开效果_three.js 由远及近的效果

three.js 由远及近的效果

1,功能介绍

使用 Threejs实现WebVR全景,VR全景小行星入场动画、鱼眼效果、由远到近效果、球形展开动画效果。如下效果图:
这种效果其实很简单,通过修改 像机视锥体垂直视野角度fov,和相机的坐标位置实现动画效果,鼠标拖动查看使用轨道控制器OrbitControls.js

2,功能实现

  • 初始化场景和设置相机角度、位置。效果和代码如下:

  1. var camera = new THREE.PerspectiveCamera(170, window.innerWidth / window.innerHeight, 0.1, 10000);
  2. camera.position.set(0, 1200, 0);
  3. // 初始化球体
  4. var geometry = new THREE.SphereGeometry(1200, 1200, 1200);
  5. geometry.scale(-1, 1, 1);
  6. // 创建材质并设置全景图
  7. var material = new THREE.MeshBasicMaterial({
  8. map: new THREE.TextureLoader().load('assets/bgImage/dibaizhumeilahuta.jpg');
  9. });
  10. // 全景图贴在球体上
  11. var mesh = new THREE.Mesh(geometry, material);
  12. // 添加到场景
  13. scene.add(mesh);
  • 加载旋转动画从远到进,动画使用Tweenjs实现,效果和代码如下:

  1. let tween = new TWEEN.Tween({
  2. fov: 170,
  3. ars: 40,
  4. rot: 0,
  5. })
  6. .to({
  7. fov: 100,
  8. ars: 0,
  9. rot: Math.PI * 1.01,
  10. }, 2300)
  11. .easing(TWEEN.Easing.Quadratic.Out)
  12. .onComplete(function() {
  13. TWEEN.remove(tween);
  14.     setTimeout(function(){
  15.         // 旋转入场动画
  16.         enterScene()
  17.     }, 1000)
  18. })
  19. .onUpdate(function(t) {
  20.     // 视角由大到小
  21. camera.fov = t.fov;
  22. camera.updateProjectionMatrix()
  23.     // 旋转
  24. mesh.rotation.y = t.rot;
  25. })
  26. .start();
  • 入场动画也是使用Tweenjs实现,效果和代码如下:

  1. function enterScene() {
  2.     // 获取相机坐标
  3. let cameraLook = new THREE.Vector3();
  4. camera.getWorldDirection(cameraLook);
  5. let tween = new TWEEN.Tween({
  6. fov: camera.fov,
  7. z: 0,
  8. cy: camera.position.y,
  9. })
  10. .to({
  11. fov: 70,
  12. z: -1200,
  13. cy: 0,
  14. }, 2000)
  15. .easing(TWEEN.Easing.Linear.None)
  16. .onComplete(function() {
  17. TWEEN.remove(tween);
  18. })
  19. .onUpdate(function(t) {
  20.             // 更新相机位置和视角大小
  21. camera.position.y = t.cy;
  22. camera.fov = t.fov;
  23. camera.updateProjectionMatrix();
  24.             // 旋转效果
  25. mesh.rotation.y += 0.01;
  26.             // 更新看向位置
  27. const target = new THREE.Vector3(0, 0, t.z);
  28. camera.lookAt(target);
  29. })
  30. .start();
  31. }

更多在线案例:左本的博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/102565
推荐阅读
  

闽ICP备14008679号