threejs 相机控制camera-controls鼠标和触摸

这篇具有很好参考价值的文章主要介绍了threejs 相机控制camera-controls鼠标和触摸。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安装

npm i camera-controls

官网地址:相机控制 - npm (npmjs.com)

相机控制

three.js 的相机控件,类似于 THREE。OrbitControls 还支持平滑过渡和 es6 导入。

演示

相机移动 用户输入
轨道旋转 鼠标左键拖动/触摸:单指移动
多莉(变焦) 鼠标中键拖动,或鼠标滚轮/触摸:双指捏合或捏出
卡车(平底锅) 鼠标右键拖动/触摸:两指移动或三指移动
  • 基本
  • 正交
  • 合身和衬垫

用法

import * as THREE from 'three';
import CameraControls from 'camera-controls';

CameraControls.install( { THREE: THREE } );

// snip ( init three scene... )
const clock = new THREE.Clock();
const camera = new THREE.PerspectiveCamera( 60, width / height, 0.01, 100 );
const cameraControls = new CameraControls( camera, renderer.domElement );

( function anim () {

	// snip
	const delta = clock.getDelta();
	const hasControlsUpdated = cameraControls.update( delta );

	requestAnimationFrame( anim );

	if ( hasControlsUpdated ) {

		renderer.render( scene, camera );

	}
} )();

构造 函数

CameraControls( camera, domElement, options )

  • camera是要控制的三.js透视相机。
  • domElement是可拖动区域的 HTML 元素。
  • options在对象中。
    • ignoreDOMEventListeners:默认值为 。if ,鼠标和触摸事件侦听器将被忽略,您可以改为附加处理程序。falsetrue

性能

  • .enabled:默认值为 。是否启用控件。true
  • .minDistance:默认值为 。小车的最小距离。0
  • .maxDistance:默认值为 。小车的最大距离。Infinity
  • .minPolarAngle:默认值为 ,以弧度为单位。0
  • .maxPolarAngle:默认值为 ,以弧度为单位。Math.PI
  • .minAzimuthAngle:默认值为 ,以弧度为单位。-Infinity
  • .maxAzimuthAngle:默认值为 ,以弧度为单位。Infinity
  • .dampingFactor:默认值为 。0.05
  • .draggingDampingFactor:默认值为 。0.25
  • .dollySpeed:默认值为 。鼠标滚轮推车的速度。1.0
  • .truckSpeed:默认值为 。卡车和基座的拖曳速度。2.0
  • .verticalDragToForward:默认值为 。与three.js的OrbitControls相同。false.screenSpacePanning
  • .dollyToCursor:默认值为 。推入鼠标光标坐标。false

事件

使用您可以订阅这些事件。addEventListener( eventname, function )

  • controlstart:当用户开始通过鼠标/触摸控制相机时触发。
  • control:当用户控制相机(拖动)时触发。
  • controlend:当用户结束控制相机时触发。
  • update:更新相机位置时触发。

方法

rotate( rotX, rotY, enableTransition )

旋转方位角 (theta) 和极角 (phi)。 并且是弧度。 在布尔值中rotXrotYenableTransition

rotateTo( rotX, rotY, enableTransition )

将方位角 (theta) 和极角 (phi) 旋转到给定点。

dolly( distance, enableTransition )

推车进/出摄像机位置。 在一个数字中。 在布尔值中distanceenableTransition

dollyTo( distance, enableTransition )

推车进/出摄像机位置到给定距离

truck( x, y, enableTransition )

使用当前方位角的卡车和基座摄像机。

moveTo( x, y, z, enableTransition )

将位置移动到给定点。target

forward( distance, enableTransition )

向前/向后移动。

fitTo( meshOrBox3, enableTransition, { paddingTop?: number = 0, paddingLeft?: number = 0, paddingBottom?: number = 0, paddingRight?: number = 0 } )

使视口适合对象边界框或边界框本身。填充物是单位的。

setLookAt( positionX, positionY, positionZ, targetX, targetY, targetZ, enableTransition )

它将相机移动到 中,并使其看起来 。positiontarget

lerpLookAt( positionAX, positionAY, positionAZ, targetAX, targetAY, targetAZ, positionBX, positionBY, positionBZ, targetBX, targetBY, targetBZ, x, enableTransition )

与 相同,但它在两种状态之间插值。setLookAt

setPosition( positionX, positionY, positionZ, enableTransition )

setLookAt没有目标,就一直盯着当前的目标。

setTarget( targetX, targetY, targetZ, enableTransition )

setLookAt没有位置,保持原地不动。

getPosition( out )

返回其当前位置。

getTarget( out )

返回其当前凝视目标。

saveState()

将当前摄像机位置设置为默认位置

reset( enableTransition )

将所有旋转和位置重置为默认值。

update( delta )

更新相机位置和方向。这应该在滴答循环中调用,如果需要重新渲染,则返回。 是上一次更新调用之间的增量时间。truedelta

toJSON()

获取 JSON 字符串中的所有状态

fromJSON( json, enableTransition )

使用 JSON 重现控件状态。 是 anim 或不在布尔值中的位置。enableTransition

dispose()

释放 cameraControls 实例本身,删除所有 eventListener。文章来源地址https://www.toymoban.com/news/detail-821012.html

到了这里,关于threejs 相机控制camera-controls鼠标和触摸的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ZED使用指南(五)Camera Controls

    (1)选择视频模式 左右视频帧同步,以并排格式作为单个未压缩视频帧流式传输。  在ZED Explorer或者使用API可以改变视频的分辨率和帧率。 (2)选择输出视图 ZED能以不同的格式输出图像,包括校正、未校正和灰度图像(左视图、右视图、并排视图、左未校正或右未校正、

    2024年02月05日
    浏览(55)
  • threejs动态调整相机位置

    本文实现的效果是,模型渲染出来后,根据用户点击模型的某部分,将相机定位到鼠标点击的位置,并放大 监听模型点击事件 点击事件 调整相机位置 不过此文的相机调整比较快、生硬,没有那种渐进式的感觉,哪位博主有更好的方法了请在下面留言哦

    2024年02月04日
    浏览(37)
  • [threejs]相机与坐标

    搞清相机和坐标的关系在threejs初期很重要,否则有可能会出现写了代码,运行时一片漆黑的现象,这种情况就有可能是因为你相机没弄对。 先来看一下threejs中的坐标(世界坐标) 坐标轴好理解,大家只需要知道在three中不同颜色代表的轴就行,再就是坐标有正负之分。向前,

    2024年02月14日
    浏览(33)
  • [QT/C++]如何得知鼠标事件是由触摸事件转换而来的,使得鼠标触摸事件分离

    依据来源:https://doc.qt.io/qt-5/qml-qtquick-mouseevent.html 具体是在event事件或者mouse系列事件中捕获到鼠标事件后,用如下代码判断鼠标事件是否由触摸事件转换而来的 通过该条件的一律返回,剩下的就是不由触摸事件生成的鼠标事件,由此做到鼠标与触摸事件的分离,使得触摸事

    2024年02月13日
    浏览(37)
  • threejs让模型始终面向相机

    需求:threejs导入3D模型,改变相机位置的同时,让模型始终面向相机。 实现方式:使用模型的lookAt()方法,设置模型lookAt的值 首次加载模型时,面向相机 相机云顶==运动时,模型面向相机

    2024年02月12日
    浏览(42)
  • threejs使用gui改变相机的参数

    定义相机的配置: gui中加入调节fov的方法 实现效果 定义参数: 初始化相机,设置相机位置。 加入gui的配置 最后的效果  

    2024年02月12日
    浏览(35)
  • GIS融合之路(三)CesiumJS和ThreeJS相机同步

    同样在这篇文章开始前重申一下,山海鲸并没有使用ThreeJS引擎。但由于ThreeJS引擎使用广泛,下文中直接用ThreeJS同CesiumJS的整合方案代替山海鲸中3D引擎和CesiumJS整合。 系列传送门: 山海鲸可视化:GIS融合之路(一)技术选型CesiumJS/loaders.gl/iTowns? 山海鲸可视化:GIS融合之路(

    2024年02月08日
    浏览(36)
  • threejs 实现场景漫游效果(相机沿着自定义轨道移动)

    效果视频: Video_22-06-15_18-10-11 实现思路:先创建一条曲线curve作为运动路线,然后使用const points = curve.getPoints(n)方法将curve分成n-1段;我们可以通过points[n] 获取第n个点的坐标位置;将相机的位置设置为这个坐标,在动画中不断地修改n的值达到移动的效果;具体操作如下:

    2024年02月11日
    浏览(92)
  • Threejs入门之三:让物体跟随鼠标动起来

    上一节我们创建了一个三维的立方体,将其放在了浏览器窗口中,但是目前来讲它只是一个静态的图片,我们并不能通过鼠标控制其旋转、缩放和移动,这一节我们来实现用鼠标控制物体的运动。 首先我们要了解一个概念,在三维场景中,我们要控制物体旋转,实际上不是物

    2024年02月11日
    浏览(54)
  • Android12 部分应用(客户大型游戏)使用鼠标点击无效,鼠标模拟触摸点击

            如标题,在某些较大的游戏应用中,会限制鼠标点击不生效,导致我们的鼠标在系统其他应用上都能使用,就是某个游戏应用无法点击。调试发现,触摸事件不受影响,那么我们可以在当前游戏应用中,点击的时候模拟一下触摸点击,查看是否生效。安卓有一个触摸

    2024年02月02日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包