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系统课程视频
  • 1. 数学几何计算基础

  • 2.位移、速度、加速度(向量)

  • 3.向量点乘、叉乘

  • 4.四元数、欧拉角(角度姿态)

  • 5.矩阵

  • 6.射线

  • 7.包围盒

  • 8.第一、三人称漫游

    • 1. 键盘WASD按键状态记录
    • 2. W键控制角色模型运动
    • 3. 加速度(按键给玩家加速)
    • 4. 阻尼(玩家角色逐渐减速停止)
    • 5. 按键S退后运动
    • 6. 相机跟着玩家走(第三人称漫游)
    • 7. 鼠标左右拖动改变玩家视角
    • 8. 获取玩家(相机)正前方方向
    • 9. 鼠标上下移动只改变相机视角
    • 10. 玩家角色左右运动(叉乘)
    • 11. 鼠标滑动改变视角(指针锁定模式)
      • 12. 快捷键切换第一、第三人称
      • 13. 骨骼动画与运动状态关联
    • 9.漫游-八叉树碰撞检测

    • 10.CannonJS物理引擎

    • Three.js进阶教程
    • 8.第一、三人称漫游
    郭隆邦
    2023-09-03
    目录

    11. 鼠标滑动改变视角(指针锁定模式)

    # 鼠标滑动改变视角(指针锁定模式)

    前面改变相机左右和上下视角,用的是鼠标拖动方式,本节课给大家演示一个游戏、元宇宙项目中,常用的不用拖动,鼠标直接滑动改变相机玩家角色或相机视角。

    # 知识点回顾

    你可以把原来鼠标左键拖动改变视角的代码if (leftButtonBool) {},if条件去掉,只剩下鼠标滑动改变视角,你会发现并不是很好控制,有个问题,鼠标离开网页后,无法在旋转玩家视角,那么怎么解决?请看下面关于指针锁定模式的介绍。

    let leftButtonBool = false;//记录鼠标左键状态
    document.addEventListener('mousedown', (event) => {
        leftButtonBool = true;
    });
    document.addEventListener('mouseup', () => {
        leftButtonBool = false;
    });
    
    document.addEventListener('mousemove', (event) => {
        if (leftButtonBool) {//根据左键按下拖动才起作用
            player.rotation.y -= event.movementX / 600;
            cameraGroup.rotation.x -= event.movementY / 600;
    
        }
    });
    

    # 体验案例源码

    你可以打开本节课案例源码,然后鼠标点击页面随便一个位置,就会进入指针锁定模式,人话说,这时候,你发现鼠标箭头不见了,鼠标可以上下左右无限滑动,如果你按下键盘左上角Esc按键,鼠标指针箭头恢复到原来状态。

    # 请求指针锁定requestPointerLock

    鼠标滑动时候,会受到浏览器网页页面窗口范围限制,不能无限制移动,这时候可以通过执行requestPointerLock()请求指针锁定。

    // 当鼠标左键按下后进入指针锁定模式(鼠标无限滑动)
    addEventListener( 'mousedown', () => {
        document.body.requestPointerLock();//body页面指针锁定
    });
    

    你执行document.body.requestPointerLock();以后,意味着document.pointerLockElement属性,会拥有一个值document.body

    if(document.pointerLockElement == document.body){
        // 指针锁定模式下,才能执行的代码
    }
    

    # 在指针锁定模式下,改变玩家人姿态角度

    进入指针模式后,才能根据鼠标位置控制人旋转

    通过document.pointerLockElement判断web页面是否进入指针锁定模式。

    鼠标点击页面进入指针锁定模式的时候,点击位置默认鼠标的坐标为原点,左右方向是x坐标.movementX(单位像素),上下方面是y坐标.movementY。

    // 人和相机初始姿态正前方:沿着z轴正半轴方向
    //鼠标左右移动,人绕y轴旋转
    addEventListener('mousemove', (event) => {
        // 进入指针模式后,才能根据鼠标位置控制人旋转
        if (document.pointerLockElement == document.body) {
            // 鼠标左右滑动,让人左右转向(绕y轴旋转),相机会父对象人绕左右转向
            //加减法根据左右方向对应关系设置,缩放倍数根据,相应敏感度设置
            person.rotation.y -= event.movementX / 500;
        }
    });
    

    # 退出指针锁定模式

    执行document.exitPointerLock();可以退出指针锁定,或者键盘键盘Esc退出指针锁定模式,就像你玩游戏一样。

    10. 玩家角色左右运动(叉乘)
    12. 快捷键切换第一、第三人称

    ← 10. 玩家角色左右运动(叉乘) 12. 快捷键切换第一、第三人称→

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