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 );
    })

效果如下:

鼠标控制

相关推荐
努力努力再努力FFF21 小时前
医生对AI辅助诊断感兴趣,作为临床人员该怎么了解和学习?
人工智能·学习
sakiko_1 天前
UIKit学习笔记5-使用UITableView制作聊天页面
笔记·学习·swift·uikit
Alice-YUE1 天前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
北山有鸟1 天前
修改源码法和插件法
嵌入式硬件·学习
richxu202510011 天前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
qeen871 天前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
lizhihai_991 天前
股市学习心得-六张分时保命图
大数据·人工智能·学习
nashane1 天前
HarmonyOS 6学习:应用签名文件丢失处理与更新完全指南
学习·华为·harmonyos·harmonyos 5
@codercjw1 天前
公差的具体标注方法(书本上/理论上标注方法)
学习
久菜盒子工作室1 天前
时寒冰:第五次产业大转移与未来30年国运:在“双向挤压”中实现惊险一跃
人工智能·学习