three.js学习记录(鼠标控制)

一、鼠标控制 - 轨道控制器(OrbitControls)

  1. 从nodeModules中导入OrbitControls,OrbitControls 是一个附加组件,必须显式导入

import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";

注意:从官网上粘贴的引入路径有时候是不对的,手动从自己的node_modules中找一下OrbitControls.js文件的路径,核实准确才有效。

  1. 通过new OrbitControls实例化一个controls,OrbitControls有两个参数,分别是camera(相机),domElement(用于事件监听的HTML元素,即当下绘制在界面的canvas元素)

const controls = new OrbitControls(camera, renderer.domElement)

  1. 在动画循环requestAnimationFrame中实时更新,不断加载位置的变化 【方案一】

一般多用【方案一】

function animate() {

requestAnimationFrame( animate );

controls.update();

renderer.render( scene, camera );

}

requestAnimationFrame( animate );

注意:如果此处没有用动画requestAnimationFrame,仅仅只是new OrbitControls(camera, renderer.domElement),则鼠标控制的效果是看不到的,即使鼠标在移动的过程中相机camera的位置是在不断变化的,但这个位置并没实时渲染到canvas上。

  1. 如果不使用requestAnimationFrame进行渲染相机位置的变化,还可以通过监听Orbitcontrol的change事件进行渲染,【方案二】

controls.addEventListener('change',() => {

renderer.render( scene, camera );

})

  1. 惯性enableDamping(默认为false),鼠标控制相机旋转时,false情况下鼠标抬起的一瞬间,旋转效果就立即停止;设置为true时,必须配合动画requestAnimationFrame,在动画中通过update方法更新控制器,即当鼠标抬起,物体的旋转会有个缓冲过程,慢慢停下(更符合物体运动规律)

    const controls = new OrbitControls(camera, renderer.domElement)
    controls.enableDamping = true
    controls.addEventListener('change',() => {
    controls.update();
    renderer.render( scene, camera );
    })

效果如下:

鼠标控制

相关推荐
bush48 分钟前
嵌入式linux学习记录四
linux·运维·学习
峥嵘life1 小时前
Android 蓝牙设备连接广播详解-2026
android·python·学习
楼田莉子1 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
星夜夏空992 小时前
FreeRTOS学习(7)——任务列表
java·前端·学习
不羁的木木2 小时前
Form Kit(卡片开发服务)学习笔记01-核心概念与架构设计
笔记·学习·harmonyos
Mikowoo0072 小时前
神经网络 替代 线性模型_进行模型学习
人工智能·神经网络·学习
不羁的木木2 小时前
ArkWeb实战学习笔记01-核心概念与架构设计
笔记·学习·harmonyos
网络与设备以及操作系统学习使用者4 小时前
零信任架构落地实践详解
运维·网络·学习·架构
吃好睡好便好4 小时前
说说眼睛的日常保健
学习·生活
_李小白4 小时前
【android opencv学习笔记】Day 29: 滤波算法之Sobel 边缘检测
android·opencv·学习