threejs相机控件使用记录

news2024/9/23 15:25:34

文章目录

  • 前言
  • 控件列表
  • 轨迹球控制器(TrackBallControls)
  • 第一人称控制器(FirstPersonControls)
  • 飞行控制器(FlyControls)
  • 轨道控制器(OrbitControls)
  • 总结


前言

threejs提供了很多摄像机控件,提供这些控件可以操作场景中的摄像机的移动、旋转等,实现交互动画效果,全部的控件在threejs发布的包中都已封装,本文记录常用相机控件的使用场景。


控件列表

常用的相机控件如下所示

名称描述
轨迹球控制器(TrackBallControls)使用鼠标/滑轮控制相机球来移动、平移、缩放场景
第一人称控制器(FirstPersonControls)类似第一人称射击类游戏,键盘控制移动,鼠标控制转向
飞行控制器(FlyControls)飞行模拟器,通过键盘和鼠标控制摄像机运动
轨道控制器(OrbitControls)用来模拟轨道视角,可以使用键盘鼠标操作相机

除了使用控件,相机本身可以通过修改position属性变换位置,通过lookAt()方法设置朝向

轨迹球控制器(TrackBallControls)

引入依赖

  <script type="text/javascript" charset="UTF-8" src="../../libs/three/controls/TrackballControls.js"></script>

创建控制器,将其绑定至相机上并设置属性

  var trackballControls = new THREE.TrackballControls(camera); // 将相机控件绑定至相机
  trackballControls.rotateSpeed = 1.0; // 旋转速率
  trackballControls.zoomSpeed = 1.0;  // 缩放速率
  trackballControls.panSpeed = 1.0;   // 移动速率

在render循环中更新相机

  var clock = new THREE.Clock();
  
  render();
  function render() {
    stats.update();
    trackballControls.update(clock.getDelta()); // 在每帧时间更新相机位置
    requestAnimationFrame(render);
    renderer.render(scene, camera)
  }   
}

操作方法

操作效果
鼠标左键拖动相机旋转翻滚
鼠标右键拖动相机平移
鼠标中键拖动场景缩放
鼠标滚轮场景缩放

效果
在这里插入图片描述

第一人称控制器(FirstPersonControls)

引入依赖

<script type="text/javascript" charset="UTF-8" src="../../libs/three/controls/FirstPersonControls.js"></script>

创建控制器,将其绑定至相机上并设置属性

  var fpControls = new THREE.FirstPersonControls(camera);
  fpControls.lookSpeed = 0.4; // 鼠标移动速度
  fpControls.movementSpeed = 20; //相机移动速度
  fpControls.lookVertical = true; //开启垂直
  fpControls.constrainVertical = true; // 固定垂直
  fpControls.verticalMin = 1.0; 
  fpControls.verticalMax = 2.0;
  fpControls.lon = -150; //默认在x轴的角度
  fpControls.lat = 120; //默认在y轴的角度

在render循环中更新相机

  var clock = new THREE.Clock();

  render();
  function render() {
    stats.update();
    fpControls.update(clock.getDelta());
    requestAnimationFrame(render);
    renderer.render(scene, camera)
  }  

操作方法

操作效果
鼠标移动控制方向
↑ ↓ ← →键上下左右移动
W S A D 键前后左右移动
R F Q键盘向上 向下 停止移动

效果

在这里插入图片描述

飞行控制器(FlyControls)

引入依赖

<script type="text/javascript" charset="UTF-8" src="../../libs/three/controls/FlyControls.js"></script>

创建控制器,设置属性,绑定相机和元素

  var flyControls = new THREE.FlyControls(camera);
  flyControls.domElement = document.querySelector("webgl-output");
  flyControls.movementSpeed = 25; // 移动速率
  flyControls.rollSpeed = Math.PI / 24;  // 转动速率
  flyControls.autoForward = true; // 自动向前移动
  flyControls.dragToLook = false; // 允许拖拽

操作方法

操作效果
鼠标左键、中键向前移动
鼠标右键向后移动
↑ ↓ ← →键上下左右看
W S A D 键前后左右移动
Q E向左、向右翻转

效果
在这里插入图片描述

轨道控制器(OrbitControls)

引入依赖

<script type="text/javascript" charset="UTF-8" src="../../libs/three/controls/OrbitControls.js"></script>

创建控制器,将其绑定至相机上并设置属性

  var orbitControls = new THREE.OrbitControls(camera);
  orbitControls.autoRotate = true; // 自动旋转
  // controls.autoRotateSpeed  旋转速率

在render循环中更新相机

  var clock = new THREE.Clock();
  
  render();
  function render() {
    stats.update();
    orbitControls.update(clock.getDelta());
    requestAnimationFrame(render);
    renderer.render(scene, camera)
  }  

操作方法

操作效果
鼠标左键拖动相机绕场景中心旋转
鼠标中键拖动/ 滚动滑轮场景缩放
鼠标右键拖动相机平移
↑ ↓ ← →键上下左右平移

效果
在这里插入图片描述

总结

控件列表
轨迹球控制器(TrackBallControls)
第一人称控制器(FirstPersonControls)
飞行控制器(FlyControls)
轨道控制器(OrbitControls)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mixamo和ue小白人映射关系以及让mixamo绑定的人物在场景中运动的多种方法实践...

ue中的root->Hips ue中 ik_foot_l ik_foot_r下面有foot_r 在mixamo下面leftfoot对应ik_foot_l 但是foot_l 只能给他对应leftToeBase 了 image.pngspline 盆骨对应pelvis 在绑定控制中进行修改即可. image.png方法一 拷贝动画蓝图 [本人原创方法] 此方法毕竟操蛋,虽然完美兼容…

Linux驱动开发基础__休眠与唤醒

目录 1 适用场景 2 内核函数 2.1 休眠函数 2.2 唤醒函数 3 驱动框架 4 编程 4.1 gpio_key_drv.c 4.2 button_test.c 4.3 Makefile 1 适用场景 在前面引入中断时&#xff0c;我们曾经举过一个例子&#xff1a; 妈妈怎么知道卧室里小孩醒了&#xff1f; 休眠-唤醒&…

pytorch深度学习案例(一)——手写数学符号识别

文章目录前言简介数据集项目结构utils模块dataLoadermodelsplotShowtrain模块predict模块下载地址前言 在前面的两篇文章中我们介绍了现代计算机视觉中常见的结构化和非结构化的CNN模型&#xff0c;本篇我们将使用这些CNN模型在手写数学符号数据集上进行识别。 CNN模型的介绍请…

2022回顾

2022年回顾 前言 新年和亲朋好友的相聚差不多接近尾声&#xff0c;假期也所剩无几&#xff0c;开始静下心来写作&#xff0c;回顾一下我的2022年&#xff0c;看下自己去年 做得好的和不足&#xff0c;展望下2023&#xff0c;开始新一年的生活。&#xff08;因为是公历2023年…

Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo

&#x1f4da;️Reference: https://github.com/grafana/intro-to-mlt 这是关于 Grafana 中可观察性的三个支柱的一系列演讲的配套资源库。 它以一个自我封闭的 Docker 沙盒的形式出现&#xff0c;包括在本地机器上运行和实验所提供的服务所需的所有组件。 Grafana 全栈可观察…

剑指 Offer 第9天 第10天

目录 剑指 Offer 42. 连续子数组的最大和 剑指 Offer 47. 礼物的最大价值 剑指 Offer 46. 把数字翻译成字符串 剑指 Offer 48. 最长不含重复字符的子字符串 剑指 Offer 42. 连续子数组的最大和 输入一个整型数组&#xff0c;数组中的一个或连续多个整数组成一个子数组。求所…

Python self用法详解

在定义类的过程中&#xff0c;无论是显式创建类的构造方法&#xff0c;还是向类中添加实例方法&#xff0c;都要求将 self 参数作为方法的第一个参数。例如&#xff0c;定义一个 Person 类&#xff1a;class Person: def__init__(self): print("正在执行构造方法") #…

大数据项目---电商数仓(三)

目录 1.即席查询_Presto概述 2.即席查询_Presto_Server的部署 3.即席查询_Presto_Server启动 4.即席查询_命令行客户端说明 5.即席查询_LZO说明 6.即席查询_Presto_web端口 ​编辑 7.即席查询_Presto使用注意事项/优化 8.即席查询_Kylin简介 9.即席查询_前置概念 10.即…

数据库系统结构、数据库系统的组成

文章目录一、数据库系统的三级模式结构1.模式&#xff08;逻辑模式&#xff09;2.外模式&#xff08;子模式、用户模式&#xff09;3.内模式&#xff08;存储模式&#xff09;二、数据库的二级映像功能1.外模式/模式映像2.模式/内模式映像3.实际应用三、数据库系统的组成---硬件…

安卓性能优化之内存优化

Java对象生命周期&#xff1a; 创建&#xff1a;为对象分配内存空间&#xff0c;构造对象应用&#xff1a;此时 对象至少被一个强引用持有不可见&#xff1a;未被任何强引用持有&#xff0c;进行可达性分析不可达&#xff1a;可达性分析为不可达&#xff0c;进入下一阶段收集&…

notes

等差&#xff1a;&#xff0c;求 解&#xff1a;、 &#xff0c;则 解&#xff1a; x系数y系数1412 由 得分母 &#xff1b;则分子为&#xff0c; 解&#xff1a;令 已知两边及夹角&#xff0c;可图解 解析几何条件转化 1.平行四边形条件的转化几何性质代数实现(1)对边平行斜…

【IoT】创业:如何找到可以主导的创业市场?

如果你想开始创业&#xff0c;开启一段不一样的旅程&#xff0c;那么你首先要做的就是选赛道&#xff01; 如何选择你的赛道、你的第一个市场呢&#xff1f; 换句话说就是&#xff0c;你如何选择自己的利基市场。 最大的市场&#xff0c;同时&#xff0c;它的需求范围也最广…

全国地级市1999—2020年污染物排放和环境治理相关指标(废水\废气\粉尘等)

工业废水、工业粉尘等污染物是影响居住环境的重要因素&#xff0c;也是在各项研究中常用的数据&#xff01;之前我们基于历年的《中国城市统计年鉴》整理了1999—2020年的人口相关数据和用地相关数据&#xff08;可查看之前推送的文章&#xff09;。在《中国城市统计年鉴》中也…

欧拉回路(模板+外加一些优化)

给定一张图&#xff0c;请你找出欧拉回路&#xff0c;即在图中找一个环使得每条边都在环上出现恰好一次。 输入格式 第一行包含一个整数t, t∈ {1,2}&#xff0c;如果t 1&#xff0c;表示所给图为无向图&#xff0c;如果t2&#xff0c;表示所给图为有向图。 第二行包含两个整数…

【MySQL】日志

https://www.cnblogs.com/myseries/p/10728533.html 在 MySQL 中&#xff0c;有多种不同的日志&#xff0c;包括错误日志、二进制日志、查询日志和慢查询日志&#xff0c;这些日志发挥着不同的作用。另外还有redo日志、undo日志和relay日志。 错误日志 错误日志是 MySQL 中最…

测试篇(四):测试用例的分类、按测试对象划分、按是否查看代码划分、你平时哪种测试方法用的多?、按照开发阶段划分

目录一、按测试对象划分1.1 界面测试1.2 可靠性测试1.3 容测性测试1.4 文档测试1.5 兼容性测试1.6 易用性测试1.7 安装卸载测试1.8 安全测试1.9 性能测试1.10 内存泄露测试1.11 弱网测试二、按是否查看代码划分2.1 黑盒测试2.2 白盒测试2.4 灰盒测试三、面试题&#xff1a;你平…

AcWing 327. 玉米田(状态压缩DP)

AcWing 327. 玉米田&#xff08;状态压缩DP&#xff09;一、问题二、分析1、思路2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、思路 这道题与之前所讲解的AcWing 1064. 小国王&#xff08;状态压缩DP&#xff09;非常相似&#xff0c;所以如果…

ARM uboot 的源码目录分析

一、uboot的源码目录分析1 1、九鼎官方 uboot 和三星原版 uboot 对比 (1) 以九鼎官方的 uboot 为蓝本来学习的&#xff0c;以三星官方的这份为对照。 (2) 不同版本的 uboot 或者同一版本不同人移植的 uboot&#xff0c;可能目录结构和文件内容都有所不同。将来大家懂了后也可…

剑指 Offer 第8天

目录 剑指 Offer 10- I. 斐波那契数列 剑指 Offer 10- II. 青蛙跳台阶问题 剑指 Offer 63. 股票的最大利润 剑指 Offer 10- I. 斐波那契数列 写一个函数&#xff0c;输入 n &#xff0c;求斐波那契&#xff08;Fibonacci&#xff09;数列的第 n 项&#xff08;即 F(N)&#xf…

java并发编程面试题目及答案2(持续更新)

22、利用原子类手写 CAS 无锁 /** * 利用 cas 手写 锁 */ public class AtomicTryLock {private AtomicLong atomicLongnew AtomicLong(0);private Thread lockCurrentThread; /** * 1 表示锁已经被获取 0 表示锁没有获取 利用 cas 将 0 改为 1 成功则表示获取锁 * return */…