Three.js移动端双指触屏控制旋转和缩放

这篇具有很好参考价值的文章主要介绍了Three.js移动端双指触屏控制旋转和缩放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 需求

在移动端通过双指来控制物体的选择和缩放。旋转通过双指旋转操作,而缩放通过双指距离实现。实现平台是小程序基于three.js的AR版。

  1. 实现思路

  1. 旋转:两个手指产生的两个点可以算出一个向量,那么我就通过程序前后两帧计算两个向量之间的夹角来判断旋转的角度信息。这里我通过Vector3.angleTo()去求得角度,这个是没有夹角方向的,所以后面我将两个向量进行叉乘,获得夹角的方向。

  1. 缩放:通过双指距离判断缩放的比例。

  1. 代码

1.小程序注册触碰的事件 .wxml文件

<canvas
        bindtouchstart="bindtouchStart"
        bindtouchmove="bindtouchMove"    
</canvas>

2.脚本上实现逻辑 .js文件文章来源地址https://www.toymoban.com/news/detail-719420.html

bindtouchStart(event)
  {
    //console.log("touchStart");
    if(event.touches.length===2)
    {
        //旋转的开始触碰参数,获取刚触碰时的两个点信息
        var client1X = event.touches[0].clientX;
        var client1Y = event.touches[0].clientY;
        this.start1X = client1X;
        this.start1Y = client1Y;
        var client2X = event.touches[1].clientX;
        var client2Y = event.touches[1].clientY;
        this.start2X = client2X;
        this.start2Y = client2Y;
        this.touchStartEvent = event.touches;

        //缩放的开始触碰参数
        var xMove = event.touches[1].clientX-event.touches[0].clientX;
        var yMove = event.touches[1].clientY-event.touches[0].clientY;
        //初始时双指距离.注:distance是全局变量,需要在前面声明出来,我没有贴这代码
        distance = Math.sqrt(xMove*xMove+yMove*yMove);
    }
  },
  bindtouchMove(event)
  {
    if(event.touches.length===2)
    {
        //旋转
        //获取刚开始触碰时生成的向量
        var v1=new THREE.Vector3(this.start2X-this.start1X,this.start2Y-this.start1Y,0);
        //获取实时的两点信息
        var client1X = event.touches[0].clientX;
        var client1Y = event.touches[0].clientY;
        var client2X = event.touches[1].clientX;
        var client2Y = event.touches[1].clientY;
        //获取实时两点生成的向量
        var v2 = new THREE.Vector3(client2X-client1X,client2Y-client1Y,0);
        //获取两个向量产生的夹角
        var angle = v2.angleTo(v1);
        //由于这个夹角只能是正的,所以要确定夹角的方向。使用叉乘来判断
        v1.cross(v2);
        if(v1.z>0){
            //角度是逆时针方向的,朝向屏幕外
            angle=-angle;
        }else{
           //角度是顺时针方向的

        }
        //传递给下一帧
        this.start1X = client1X;
        this.start1Y = client1Y;
        this.start2X = client2X;
        this.start2Y = client2Y;
        //执行旋转操作.获得角度信息后可自由发挥
        cameraBusiness.rotaClick(angle);

        //缩放
        var xMove = event.touches[1].clientX-event.touches[0].clientX;
        var yMove = event.touches[1].clientY-event.touches[0].clientY;
        var curDistance = Math.sqrt(xMove*xMove+yMove*yMove);
        var distanceDiff = curDistance-distance;
        //执行缩放操作.获得距离信息后可自由发挥
        cameraBusiness.scaleClick(distanceDiff);
        distance = curDistance;
    }
  },

到了这里,关于Three.js移动端双指触屏控制旋转和缩放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • VUE使用Three.js实现模型,点击交互,相机旋转视角跟随移动(Threejs中使用Tweenjs,含demo源码)

    目录 一、Three.js是什么? 二、VUE简单使用Three.js步骤 1.npm安装 2.template模板 3.引入库 4.定义全局变量 5.初始化场景 6.初始化相机 7.初始化灯光 8.初始化渲染器 9.创建模型(这里我搭建的模型是一个简单双面货架模型) 10.根据浏览器窗口自适应 11.初始化函数,页面加载完成时调用

    2024年02月03日
    浏览(69)
  • Three.js - 通过键盘控制模型移动和攻击(二十五)

    上节加载了模型和模型动画,本节使用键盘控制模型移动和连贯动画实现攻击动作。 基础模板 上节讲述加载了模型,并实现了动画。本节在上节的基础上进行修改。 修改灯光并添加阴影 开启阴影渲染。 添加方向光,开启阴影投射。 在地面网格上开启阴影接收。 修改模型网

    2024年02月10日
    浏览(55)
  • three.js实现鼠标点击控制物体移动(带动画效果,位置精确)

    通过查阅各种资料,最终确定解决方案,动画效果使用gsap组件库实现,也可不用,代码稍作修改即可。解决鼠标点击坐标偏移问题,复制可直接运行。 完整代码如下:

    2024年02月07日
    浏览(61)
  • three js模型旋转

    如何让立方体模型旋转到指定的面 父页面 效果:

    2024年02月15日
    浏览(40)
  • 从three.js旋转动画,我了解了requestAnimationFrame

    前言  📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步!  🍅  个人主页: 南木元元 目录 three.js旋转动画 动画前置知识 屏幕刷新率与浏览器重绘次数 动画是如何形成的 实现动画的方式有哪些 什么是requestAnimationFrame setTimeoutsetInterval 结

    2024年02月03日
    浏览(42)
  • Three.js使用OrbitControls后修改相机旋转方向无效

            在项目中添加了OrbitControls控制器来控制相机的旋转和平移,但是需要修改初始的相机角度,于是我把相机的角度进行修改,如下: 运行项目后发现相机的位置并没有发生变化。原因是相机旋转和移动被OrbitControls控制器托管了。         方法1.于是我尝试创建一个组

    2024年02月16日
    浏览(53)
  • Three.js -相机平滑移动

    一、安装 二、引入 三、使用 最后不要忘了在render中执行 TWEEN.update();

    2024年02月13日
    浏览(61)
  • Three 之 three.js (webgl)鼠标/手指通过射线移动物体的简单整理封装

    目录 Three 之 three.js (webgl)鼠标/手指通过射线移动物体的简单整理封装 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、案例实现步骤 六、关键代码 Three js 开发的一些知识整理,方便后期遇到类似的问题,能够及时查阅使用。 本节介绍, three.js (webgl) 中,

    2024年02月16日
    浏览(62)
  • Three.js——scene场景、几何体位置旋转缩放、正射投影相机、透视投影相机

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年04月14日
    浏览(54)
  • Unity- 控制物体旋转、移动、缩放的功能

    本文章主要介绍Unity中控制物体旋转、移动、缩放的方法~ 旋转: (一)控制物体自转 (二)控制物体A绕着物体B转 脚本放在物体A上,再将物体B拖到脚本相应位置上 移动: 物体不断向前移动  扩展:使用键盘(上下左右箭头)控制物体前后左右移动 缩放: ① 物体放大一倍

    2024年02月08日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包