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.相机基础

    • 1. 正投影相机
    • 2. 正投影相机-Canvas尺寸变化
    • 3. 包围盒Box3
    • 4. 地图案例(包围盒、正投影)
    • 5. 相机动画(.position和.lookAt())
      • 6. 不同方向的投影视图
      • 7. 旋转渲染结果(.up相机上方向)
      • 8. 管道漫游案例
      • 9. OrbitControls旋转缩放限制
      • 10. 相机控件MapControls
    • 11.光源和阴影

    • 12.精灵模型Sprite

    • 13.后处理EffectComposer

    • 14.射线拾取模型

    • 15.场景标注标签信息

    • 16.关键帧动画

    • 17.动画库tween.js

    • Three.js教程
    • 10.相机基础
    郭隆邦
    2023-02-11
    目录

    5. 相机动画(.position和.lookAt())

    # 相机动画(.position和.lookAt())

    下面给大家讲解,通过相机对象Camera的.position属性和.lookAt()方法,实现一段相机动画。

    # 相机运动动画

    改变相机的位置.position,三维场景在canvas画布上呈现不同的效果,如果连续改变相机的位置.position,就可以获得一个动画效果。

    课件案例源码是一个工厂模型,相机在空中俯视工厂,如果在渲染循环中不停地改变相机位置,这时候产生的视觉效果,就好比你在天上运动,看地面的效果。

    // 渲染循环
    function render() {
        camera.position.z -= 0.3;//相机直线运动动画
        renderer.render(scene, camera);
        requestAnimationFrame(render);
    }
    render();
    

    # 相机圆周运动

    在渲染循环中,改变相机位置,在XOZ平面上绕着y轴圆周运动。

    // 渲染循环
    let angle = 0; //用于圆周运动计算的角度值
    const R = 100; //相机圆周运动的半径
    function render() {
        angle += 0.01;
        // 相机y坐标不变,在XOZ平面上做圆周运动
        camera.position.x = R * Math.cos(angle);
        camera.position.z = R * Math.sin(angle);
        renderer.render(scene, camera);
        requestAnimationFrame(render);
    }
    render();
    

    # 执行lookAt()计算相机视线方向

    改变.position属性后,如果不执行.lookAt()方法,相机的观察方向默认不变。

    如果你希望相机圆周运动的同时,改变相机视线方向,保持相机镜头始终指向坐标原点或其它位置,需要每次改变.position属性后,重新执行一遍.lookAt()方法

    function render() {
        angle += 0.01;
        camera.position.x = R * Math.cos(angle);
        camera.position.z = R * Math.sin(angle);
        // .position改变,重新执行lookAt(0,0,0)计算相机视线方向
        camera.lookAt(0,0,0);
        requestAnimationFrame(render);
    }
    render();
    
    4. 地图案例(包围盒、正投影)
    6. 不同方向的投影视图

    ← 4. 地图案例(包围盒、正投影) 6. 不同方向的投影视图→

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