Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Three.js快速入门

  • 2.几何体BufferGeometry

  • 3.模型对象、材质

  • 4.层级模型

  • 5.顶点UV坐标、纹理贴图

  • 6.加载外部三维模型(gltf)

  • 7.PBR材质与纹理贴图

  • 8.渲染器和前端UI界面

  • 9.生成曲线、几何体

  • 10.相机基础

  • 11.光源和阴影

  • 12.精灵模型Sprite

  • 13.后处理EffectComposer

  • 14.射线拾取模型

  • 15.场景标注标签信息

  • 16.关键帧动画

  • 17.动画库tween.js

    • 1. tweenjs创建threejs动画
    • 2. tweenjs相机运动动画
    • 3. 点按钮,相机飞行靠近观察设备
    • 4. 点击设备,相机靠近放大预览
      • 5. 缓动算法.easing(地球渐入相机动画)
      • 6. 模型或标签淡入淡出
      • tweenjs常用属性和方法
    • Three.js教程
    • 17.动画库tween.js
    郭隆邦
    2023-04-25
    目录

    4. 点击设备,相机靠近放大预览

    # 点击设备,相机靠近放大预览

    本节课内容,其实和上节课的“3.点按钮,相机飞行靠近观察设备”基本相似,你可以当做练习题。

    具体交互效果就是鼠标点击选中某个设备,相机靠近该设备,特别关注,设备在屏幕上呈现放大显示的效果。

    下面在前面课程射线拾取模型弹出标签 (opens new window)的代码基础上给大家讲解。演示文件已经提前引入tweenjs动画库和上节课封装的相机动画代码。

    # 点击选中设备,相机飞行靠近

    chooseObj是鼠标单击射线拾取的模型对象,你可以获取该模型对象世界坐标对应的某个空对象位置,生成相机动画。

    chooseObj是鼠标单击射线拾取的模型对象,你可以获取该模型对象世界坐标,生成相机动画。不过有一点要注意在Blender中,你要设置好选中设备的局部坐标系,确保局部坐标系,在设备上某个位置,比如居中,比如顶部,根据需要自定义设置,不过不要偏差太大,比如设备的局部坐标系与设备本身距离很远。

    const pos = new THREE.Vector3();
    chooseObj.getWorldPosition(pos); //获取三维场景中某个对象世界坐标
    

    通过一个空对象来掌控相机动画的观察目标。

    const pos = new THREE.Vector3();
    //获取三维场景中某个对象世界坐标
    model.getObjectByName(chooseObj.name+'标注').getWorldPosition(pos); 
    

    生成相机动画

    // 相机飞行到的位置和观察目标拉开一定的距离
    const pos2 = pos.clone().addScalar(30);
    // 相机从当前位置camera.position飞行三维场景中某个世界坐标附近
    createCameraTween(pos2, pos)
    

    # 关闭设备标签,相机回到整体预览状态

    原来标签关闭按钮代码

    // 鼠标单击按钮,关闭HTML标签
    document.getElementById('close').addEventListener('click', function () {
        if (chooseObj) { //把原来选中模型对应的标签和发光描边隐藏
            outlinePass.selectedObjects = []; //无发光描边
            chooseObj.remove(tag); //从场景移除
        }
    })
    

    关闭设备标签,相机回到整体预览状态

    // 相机整体预览对应的位置和观察目标
    const cameraPos0 = new THREE.Vector3(202, 123, 125)
    const target0 = new THREE.Vector3(0, 0, 0);
    // 鼠标单击按钮,关闭HTML标签
    document.getElementById('close').addEventListener('click', function () {
        if (chooseObj) { //把原来选中模型对应的标签和发光描边隐藏
            outlinePass.selectedObjects = []; //无发光描边
            chooseObj.remove(tag); //从场景移除
            // 相机从当前位置camera.position回到整体预览状态
            createCameraTween(cameraPos0, target0)
        }
    })
    
    3. 点按钮,相机飞行靠近观察设备
    5. 缓动算法.easing(地球渐入相机动画)

    ← 3. 点按钮,相机飞行靠近观察设备 5. 缓动算法.easing(地球渐入相机动画)→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式